2013-01-24 3 views
1

코드에서 observable을 사용하려고하는데이 문제로 인해 어려움을 겪고 있습니다.Observable에 대한 두 개의 서로 다른 메서드 호출에서 Observers 수가 일치하지 않습니다.

public class observeState extends Observable 
{ 
    public void setSelectedTransaction(int idx) 
    { 
     if (selectedTransaction != idx) 
     { 
      this.selectedTransaction = idx; 
      setChanged(); 
      notifyObservers("setSelectedTransaction"); 
      System.out.println("Observers : "+this.countObservers()); 
     } 
    } 

    public void setLog(Log log) 
    { 
     if(theLog != log) { 
      theLog = log; 
      System.out.println(theLog.getLogTransactions().size() + "setLog"); 
      setChanged(); 
      notifyObservers("setLog"); 
      System.out.println("Observers : "+this.countObservers()); 
     } 
    } 

이 관찰 클래스를 관찰 두 관찰자가 있으며 setSelectedTransaction 방법은 테스트 라인 "관찰자 : 2"로 호출 될 때 그것은 notifyObservers을 보내 않습니다. 그러나 다음 방법 setLog에는 "Observers : 0"을주는 옵저버가없는 것 같습니다. 내가 관찰 가능한 방법을 한 번만 사용할 수 있다고 생각하지 않습니다.

+0

아마도'setChanged()'가 이상한 일을하고 있을까요? 또한, 'this'가 당신이 가리키고 있다고 생각하는 것을 가리키고 있는지 다시 한번 확인하십시오. – keyser

+0

귀하의 의견에 감사드립니다. Keyser : D –

답변

2

이 문제의 대부분은 같은 개체에서 메서드를 호출하지 않기 때문일 수 있습니다. 동일한 이름이나 다른 혼란이 있기 때문에 두 객체가 같다고 가정하는 것은 일반적인 실수입니다. 각 객체의 hashCode를 출력하거나 디버거를 사용하여 실제로 동일한 객체를 호출하는지 확인합니다.

현재 전화 번호를 역순으로 시도하거나 번을 시도하여 이론을 테스트 할 수 있습니다. 당신이 전화를 사용하는

+1

또한 관찰자가 통보 할 때 옵저버로서 스스로를 제거 할 가능성이 있습니다. 그것도 확인하십시오! –

+0

감사합니다. 당신은 아주 옳습니다. 어쨌든 저는 어떤 방법을 부를 때 새로운 대상을 계속 만들어 왔습니다. 모든 의견을 주셔서 감사하며 답변에 대한 질문이 질문 제목과 관련이없는 경우 어떻게해야합니까? 내가 그것을 제거해야합니까? –

+0

관찰자는 오류가 발생하지 않고 관찰자를 반복하면서 자신을 제거 할 수 있습니다. 즉, COncurrentModificationException을 확인하지 않습니다. –

0

중 하나 객체setSelectedTransactionsetLog다른 또는 관찰자는 업데이트 방법에 옵서버로 스스로 제거 될 수 있습니다.

+0

가능한 답변 주셔서 감사합니다 :) –