构造函数被再次调用?

构造函数被再次调用?

问题描述:

我有这个构造函数;构造函数被再次调用?

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

我会发现它更可能是你看到它构造了两个不同的对象。您必须提供更多信息,如堆栈跟踪;在这里你甚至没有显示被调用的构造函数!

你描述的行为几乎是不可能的。无论你的代码是不同于你显示的代码,或者你没有调试你认为你正在调试的代码。没有complete code that we can run,这就是我们所能说的。

+0

是的,我的方法在更新中调用时出现问题。在那里一分钟,我认为'不可能'发生了。 – Halo 2010-04-26 12:48:24

是否确定更新不是从构造函数中间接调用的,这会导致更新中的断点被触发。

尝试在构造函数的开始和结束时设置断点,然后在更新中设置断点。当你点击第一个构造函数断点时,点击'continue'并查看下一个触发哪个断点。

这是多线程吗?是否有可能调用另一个线程上创建的另一个实例的构造函数?

+0

不,不,谢谢,我认为一件不可能发生的事情正在发生,所以我有点吓坏了。 – Halo 2010-04-26 12:50:27