Question

J'ai ce constructeur;

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

Et j'ai une méthode de mise à jour dans la même 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

Quand je suis le flux du débogueur, je vois que lorsque la mise à jour est appelée, quelque part dans la méthode, le programme va dans le constructeur et l'exécute encore une fois (super, pageIndex, etc.). Pourquoi faut-il aller au constructeur. D Je ne dis pas qu'il y aller

Je peux faire une analyse plus approfondie et voir où il va au constructeur si vous voulez. Soit dit en passant, changedComponentIndex est une variable statique.

Était-ce utile?

La solution

je trouverais beaucoup plus probable que vous le voyez construire deux objets différents. Il faudrait fournir plus d'informations comme une trace de la pile; Vous avez même pas montré le constructeur étant invoqué!

Autres conseils

Le comportement que vous décrivez est à peu près impossible. Soit votre code est différent de ce que vous avez montré ou que vous n'êtes pas le débogage du code que vous pensez que vous êtes le débogage. Sans code complet que nous pouvons exécuter , qui est tout ce que nous pouvons dire.

Êtes-vous sûr que la mise à jour ne soit pas appelée indirectement à partir du constructeur, qui se traduirait par un point d'arrêt dans la mise à jour se déclenche.

Essayez de régler un point d'arrêt au début du constructeur et à la fin, puis une en mise à jour. Lorsque vous cliquez sur le premier constructeur point d'arrêt, appuyez sur « continuer » et voir ce qui se déclenche à côté breakpoint.

Est-ce multi-thread? Est-il possible que le constructeur d'une autre instance créée sur un autre thread est appelé?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top