Domanda

Ho questo costruttore;

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

E io ho un metodo di aggiornamento nella stessa classe;

   @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

Quando seguo il flusso dal debugger, vedo che quando l'aggiornamento si chiama, da qualche parte nel metodo, il programma va al costruttore e l'esegue di nuovo (super, pageIndex, etc.). Perché andare al costruttore:. D non ho detto che per andare là

posso fare un'analisi più approfondita e vedere dove va al costruttore, se si desidera. Tra l'altro, changedComponentIndex è una variabile statica.

È stato utile?

Soluzione

I troverebbe molto più probabile che si sta vedendo che la costruzione di due oggetti diversi. Avresti per fornire ulteriori informazioni come una traccia dello stack; qui non hai nemmeno mostrato il costruttore essere invocato!

Altri suggerimenti

Il comportamento che descrivi è praticamente impossibile. Sia il codice è diverso da quello che hai mostrato o non sei il debug del codice che si pensa Non Sei il debug. Senza codice completo che si possa correre , questo è tutto quello che possiamo dire.

Sei sicuro che l'aggiornamento non è chiamato indirettamente all'interno del costruttore, che si tradurrebbe in un punto di interruzione in aggiornamento sempre innescata.

Prova a impostare un punto di interruzione all'inizio del costruttore e alla fine, poi uno in aggiornamento. Quando si colpisce il primo punto di interruzione costruttore, hit 'continuare' e vedere quale punto di interruzione viene attivato successiva.

E 'questo multi-threaded? E 'possibile che il costruttore per un'istanza diversa creata su un altro thread viene chiamato?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top