-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

当我遵循调试器的流程时,我看到当调用 update 时,在方法的某处,程序进入构造函数并重新执行它(super、pageIndex 等)。为什么它去构造函数:DI 没有告诉它去那里。

如果你愿意,我可以进行更深入的分析,看看它去哪里构造函数。顺便说一下,changedComponentIndex是一个静态变量。

4

4 回答 4

1

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

于 2010-04-26T12:41:59.890 回答
0

您描述的行为几乎是不可能的。您的代码与您显示的不同,或者您没有调试您认为正在调试的代码。没有我们可以运行的完整代码,我们只能这么说。

于 2010-04-26T12:42:24.007 回答
0

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

尝试在构造函数的开头和结尾设置一个断点,然后在更新中设置一个。当您点击第一个构造函数断点时,点击“继续”并查看下一个触发哪个断点。

于 2010-04-26T12:42:55.440 回答
0

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

于 2010-04-26T12:43:21.383 回答