0

ユーザー アクティビティのステータスを追跡するために使用している変数に問題があります。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 として表示されます。どうすればこれを回避できますか?

4

1 に答える 1