-1

このコンストラクターがあります。

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

そして、同じクラスに update メソッドがあります。

   @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 など)。なぜコンストラクターに行くのですか:DIはそこに行くように指示しませんでした。

必要に応じて、より深い分析を行い、コンストラクターのどこに行くかを確認できます。ちなみに、changedComponentIndexは静的変数です。

4

4 に答える 4

1

I would find it far more probable that you are seeing it construct two different objects. You'd have to provide more information like a stack trace; here you haven't even shown the constructor being invoked!

于 2010-04-26T12:41:59.890 に答える
0

あなたが説明する動作はほとんど不可能です。コードが表示されているものと異なるか、デバッグしていると思われるコードをデバッグしていません。実行できる完全なコードがなければ、それしか言えません。

于 2010-04-26T12:42:24.007 に答える
0

update がコンストラクター内から間接的に呼び出されていないことを確認してください。これにより、更新がトリガーされてブレークポイントが発生します。

コンストラクターの最初と最後にブレークポイントを設定してから、更新時にブレークポイントを設定してみてください。最初のコンストラクター ブレークポイントに到達したら、[続行] をクリックして、次にトリガーされるブレークポイントを確認します。

于 2010-04-26T12:42:55.440 に答える
0

これはマルチスレッドですか?別のスレッドで作成された別のインスタンスのコンストラクターが呼び出されている可能性はありますか?

于 2010-04-26T12:43:21.383 に答える