ユーザー アクティビティのステータスを追跡するために使用している変数に問題があります。GUIには、ボタンをクリックすると2番目のGUIが起動するボタンがあります。その GUI で、ユーザーは最初の GUI で開始されたアクティビティを完了するか、または完了できません。
ユーザーが 2 番目の GUI をキャンセルした場合、最初の GUI に戻り、すべての変数とリストを現在の値のままにするという考え方です。2 番目の GUI が最初の GUI のアクティビティを完了すると、すべての変数とリストがリセットされます。
これを追跡するために、変数 (Boolean complete) を最初に FALSE に設定しました。2 番目の GUI で、([キャンセル] ボタンではなく) [OK] ボタンがクリックされると、2 番目の GUI は最初の GUI のメソッドを呼び出し、「完了」の値を TRUE に変更します。
一体何が起こっているのかを確認するために、いくつかの時点で System.out.println を使用して、途中で「完全」の値を確認できるようにしています。私が見るのはこれです:
Launching first GUI - complete = FALSE
Launching second GUI - complete = FALSE
Clicking "OK" in second GUI - complete = TRUE
Second GUI closes itself, returning to complete first GUI activity
First GUI finishes activity with complete = FALSE
showandwait を使用して 2 番目の GUI を起動し、showandwait を含むメソッドが開始されると、"complete" = FALSE の値になるためだと思います。表示と待機の WAIT 部分で値が変更され、メソッドが続行され、TRUE に変更されたにもかかわらず、値がまだ FALSE のままになっています。
問題のコードの概要は次のとおりです (正確なコードが必要な場合は、長くなりますが、リクエストに応じて投稿できます)。
completeButton.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent t) {
try {
System.out.println("b4 calc = " + complete); // complete = FALSE
// all the code to create the calcStage
calcStage.showAndWait(); // second GUI, which calls a method in THIS
// class that changes complete to TRUE. That method
// (in THIS file) also has a println that shows the change.
getComplete(); // tried adding this method to check the value of
// "complete" after the change made by the calcStage
// (which calls a method in this same file)
System.out.println("Complete? " + complete);
// this shows complete = FALSE,
// though in the calcStage it was changed to TRUE
if (salecomplete) {
// code that should reset all variables and lists if the activity was completed
}
}
}
}
ここでの質問は、なぜ 2 番目の GUI が "complete" の値を正常に変更するのかということですが、最初の GUI に戻ると、まだ complete が FALSE として表示されます。どうすればこれを回避できますか?