Вопрос

У меня есть этот конструктор;

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, PageInex и т. Д.). Почему он идет к конструктору: ди не сказал, чтобы пойти туда.

Я могу сделать более глубокий анализ и посмотреть, где он идет к конструктору, если хотите. Кстати, changedComponentIndex это статическая переменная.

Это было полезно?

Решение

Я бы нашел гораздо более вероятно, что вы видите, что он построит два разных объекта. Вам придется предоставить больше информации, как трассировка стека; Здесь вы даже не показали, что конструктор вызывают!

Другие советы

Поведение, которое вы описываете, в значительной степени невозможно. Либо ваш код отличается от того, что вы показали, или вы не отладки кода, который вы считаете отладкой. Без полный код, который мы можем запустить, Это все, что мы можем сказать.

Вы уверены, что обновление не вызывается косвенно из строя в конструкторе, что приведет к точке останова в обновлении.

Попробуйте установить точку останова в начале конструктора и в конце, затем по одному в обновлении. Когда вы попадаете на первую точку останова конструктора, нажмите «Продолжить» и посмотрите, какая точка останова срабатывает дальше.

Это многопоточная? Возможно ли, что конструктор для другого экземпляра, создаваемого на другой поток?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top