1

私はjavax.swingパッケージを使用してGUIを構築しており、ボタンが押されたかどうかを確認するために、内部にifステートメントを含むwhileループを永久に実行しています。なんらかの理由で、このコードは while ループ内でコンソールに出力する場合にのみ機能します。

アルゴリズムの構造は次のとおりです。

while(true){
   System.out.println(" ");
   if (startOver && playPressed) {//set to true on JButton press
    //do stuff
   }
}

おそらくこれはある種のスレッドの問題ですか?誰もそのような問題に遭遇したことがありますか? 無限 while ループを含まない JButton が押されるのを待つ方法はありますか?

前もって感謝します!

4

2 に答える 2

2

Swing はイベントベースです。ボタンが押されるのを待っている無限ループを持つことは想定されていません。ループは、Swing によって内部的に実装されます。あなたがしなければならないことは、アクションリスナーをイベントに追加することです。これは、クリックされたときにボタンによって呼び出されます。

button.addActionListener(new ActionListener() {
    @Override 
    public void actionPerformed(ActionEvent e) {
        System.out.println("The button has been clicked!");
        // do stuff
    }
}

これは、Swing を扱うときの基本的なことです。スイングのチュートリアルを読む必要があります。

スイング イベント ディスパッチ スレッドの無限ループは、GUI を永久にフリーズします。

于 2013-04-08T18:53:13.110 に答える
0

無限ループなしでこの問題を解決できた唯一の方法は、アルゴリズムの「//do stuff」部分用に新しいスレッドを作成することでした。

非常に奇妙で、while ループ内で機能させるためにコンソールに出力しなければならなかった理由をまだ理解できません。

于 2013-04-10T00:58:26.060 に答える