2010-04-26 121 views
-1

我有這個構造函數;構造函數被再次調用?

public UmlDiagramEntity(ReportElement reportElement, int pageIndex, Controller controller) { 
    super(reportElement.getX1(), reportElement.getY1(), reportElement.getX2(), reportElement.getY2()); 
    setLayout(null); 

    this.pageIndex = pageIndex; 
    this.controller = controller; 
    reportElements = reportElement.getInternalReportElements(); 
    components = new ArrayList<AbstractEntity>(); 
    changedComponentIndex = -1; 

    PageListener p = new PageListener(); 
    this.addMouseMotionListener(p); 
    this.addMouseListener(p); 

    setPage(); 
} 

我在同一個類中有更新方法;

@Override 
    public void update(ReportElement reportElement) { 
     if (changedComponentIndex == -1) { 
      super.update(reportElement); 
     } else { 
      reportElements = reportElement.getInternalReportElements(); 
      if (components.size() == reportElements.size()) { 
       if (!isCommitted) { 
        if (reportElement.getType() == ReportElementType.UmlRelation) { 
         if (checkInvolvementAndSet(changedComponentIndex)) { 
          anchorEntity(changedComponentIndex); 
         } else { 
          resistChanges(changedComponentIndex); 
         } 
         return; 
        } 
       } 
..................goes on 

當我跟着從調試器的流量,我看到,當更新被調用,在方法的某處,程序進入到構造和重新執行這一切(超,PageIndex的,等等)。爲什麼會去構造函數:D我沒有告訴它去那裏。

我可以做一個更深入的分析,看看它到了構造函數的地方,如果你想。順便說一句,changedComponentIndex是一個靜態變量。

+0

你可以顯示一個堆棧跟蹤什麼時候它再次進入構造函數? – rsp 2010-04-26 12:40:28

+1

「如果你願意,我可以進行更深入的分析,看看它到達構造函數的位置。」我認爲這可能會幫助你回答你自己的問題...... – Thomas 2010-04-26 12:41:25

+0

哦,我很抱歉,我現在想通了,這可能不是一個不尋常的電話,但我的錯誤。 – Halo 2010-04-26 12:43:46

回答

1

我會發現它更可能是你看到它構造了兩個不同的對象。您必須提供更多信息,如堆棧跟蹤;在這裏你甚至沒有顯示被調用的構造函數!

0

你描述的行爲幾乎是不可能的。無論你的代碼是不同於你顯示的代碼,或者你沒有調試你認爲你正在調試的代碼。沒有complete code that we can run,這就是我們所能說的。

+0

是的,我的方法在更新中調用時出現問題。在那裏一分鐘,我認爲'不可能'發生了。 – Halo 2010-04-26 12:48:24

0

是否確定更新不是從構造函數中間接調用的,這會導致更新中的斷點被觸發。

嘗試在構造函數的開始和結束時設置斷點,然後在更新中設置斷點。當你點擊第一個構造函數斷點時,點擊'continue'並查看下一個觸發哪個斷點。

0

這是多線程嗎?是否有可能調用另一個線程上創建的另一個實例的構造函數?

+0

不,不,謝謝,我認爲一件不可能發生的事情正在發生,所以我有點嚇壞了。 – Halo 2010-04-26 12:50:27