Frage

Ich habe diesen Konstruktor;

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();
}

Und ich habe eine Update-Methode in derselben Klasse;

   @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

Wenn ich die Strömung von dem Debugger folgen, sehe ich, dass, wenn Update genannt wird, irgendwo in dem Verfahren, geht das Programm in den Konstruktor und führt es wieder von vorn (super, pageindex, etc.). Warum es an den Konstruktor gehen. D Ich habe es nicht sagen, dorthin zu gehen

Ich kann eine tiefere Analyse machen und sehen, wo es an den Konstruktor geht, wenn Sie wollen. By the way, ist changedComponentIndex eine statische Variable.

War es hilfreich?

Lösung

würde ich es viel wahrscheinlicher, dass Sie sehen es zwei verschiedene Objekte konstruieren. Sie müssten, um weitere Informationen wie ein Stack-Trace liefern; hier haben Sie nicht einmal den Konstruktor gezeigt aufgerufen wird!

Andere Tipps

Das Verhalten, das Sie beschreiben, ist so ziemlich unmöglich. Entweder Ihr Code unterscheidet sich von dem, was Sie gezeigt haben, oder Sie Debuggen den Code nicht Sie denken, debuggen. Ohne vollständigen Code, dass wir laufen können, das ist alles was wir sagen können.

Sind Sie sicher, dass Update nicht indirekt aus der Konstruktor aufgerufen wird, die in einem Haltepunkt in Aktualisierung führen würde, ausgelöst zu werden.

Versuchen Sie einen Haltepunkt zu Beginn des Konstrukteurs und am Ende einstellen, dann ein in Update. Wenn Sie den ersten Konstruktor Haltepunkt erreicht, klicken Sie auf ‚continue‘ und sehen, welche Unterbrechungs nächste ausgelöst wird.

Ist das multi-threaded? Ist es möglich, dass der Konstruktor für eine andere Instanz auf einem anderen Thread erstellt wird, aufgerufen wird?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top