コンストラクターが再び呼ばれていますか?
-
01-10-2019 - |
質問
私はこのコンストラクターを持っています。
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
デバッガーからのフローに従うと、更新が呼び出されると、プログラムがコンストラクターに入り、再び実行されます(Super、PageIndexなど)。なぜそれがコンストラクターに行くのか:ディはそこに行くように言わなかった。
必要に応じて、より深い分析を行い、コンストラクターにどこに行くのかを見ることができます。ところで、 changedComponentIndex
静的変数です。
解決
私はあなたがそれが2つの異なるオブジェクトを構築するのを見ている可能性がはるかに高いと思います。スタックトレースなど、より多くの情報を提供する必要があります。ここでは、コンストラクターが呼び出されていることを示していません!
他のヒント
あなたが説明する行動はほとんど不可能です。コードが表示されたものとは異なるか、デバッグしていると思われるコードをデバッグしていません。それなし 実行できる完全なコード, 、それが私たちが言うことができるすべてです。
アップデートはコンストラクター内から間接的に呼ばれていないことを確認してください。その結果、更新がトリガーされるブレークポイントが得られます。
コンストラクターの開始時と最後にブレークポイントを設定してから、更新中に設定してみてください。最初のコンストラクターブレークポイントを押したときに、「続行」を押して、次にどのブレークポイントがトリガーされるかを確認します。
これはマルチスレッドですか?別のスレッドで作成された別のインスタンスのコンストラクターが呼び出されている可能性はありますか?
所属していません StackOverflow