Конструктор снова вызывается? - PullRequest
0 голосов
/ 26 апреля 2010

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

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 является статической переменной.

Ответы [ 4 ]

1 голос
/ 26 апреля 2010

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

0 голосов
/ 26 апреля 2010

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

0 голосов
/ 26 апреля 2010

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

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

0 голосов
/ 26 апреля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...