我有这个构造函数;
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
当我按照调试器的流程进行操作时,我看到在调用update时,在方法的某个地方,程序进入构造函数并重新执行它(super,pageIndex等)。为什么要去构造函数:D我没有告诉它去那里。
如果您愿意,我可以进行更深入的分析并查看构造函数的位置。顺便说一句,changedComponentIndex
是一个静态变量。
答案 0 :(得分:1)
我会发现你看到它构建两个不同的对象的可能性要大得多。您必须提供更多信息,如堆栈跟踪;在这里你甚至没有显示被调用的构造函数!
答案 1 :(得分:0)
您描述的行为几乎是不可能的。您的代码与您显示的代码不同,或者您没有调试您认为正在调试的代码。如果没有complete code that we can run,那就是我们所能说的。
答案 2 :(得分:0)
您确定不会在构造函数中间接调用更新,这会导致更新中的断点被触发。
尝试在构造函数的开头和结尾处设置断点,然后在更新中设置断点。当您点击第一个构造函数断点时,点击“继续”并查看下一个触发的断点。
答案 3 :(得分:0)
这是多线程的吗?是否有可能在另一个线程上创建另一个实例的构造函数?