我有这个构造函数;

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

当我遵循调试器的流程时,我会发现当调用更新时,方法中的某个地方,程序将进入构造函数并将其再次执行(Super,PageIndex等)。它为什么转到构造函数:di没有告诉它去那里。

我可以进行更深入的分析,看看构造函数的位置。顺便一提, changedComponentIndex 是静态变量。

有帮助吗?

解决方案

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

其他提示

您描述的行为几乎是不可能的。您的代码与您所显示的内容有所不同,或者您没有调试您认为要调试的代码。没有 我们可以运行的完整代码, ,这就是我们可以说的。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top