プログラムデータとGUIを更新する予定のwhileループがありますが、whileループが実行されるまでGUI部分がフリーズします。私はSwingUtilities.invokeLater()
とSwing Timer
を使用してみましたがSwingUtilities.invokeLater()
作品や方法は、EDT上Swing Timer
を使用する方法を私は本当に得ることはありませんWhileループと遅延によるSwing GUIの更新
while(game.getCompTotal() < 17) {
try {
Thread.sleep(2500);
} catch (Exception ex){
ex.printStackTrace();
}
game.compHit(); // Program data update
updateCardPanels(); // GUI update -- Does not update until the while loop finishes.
if(game.checkCompBust()){
if(JOptionPane.showConfirmDialog(this, "Dealer Busted. Play again?") == JOptionPane.YES_OPTION){
init(); // Reset
}
}
}
:
は、ここに私のコードです。私の質問は、whileループのプログラムデータと同時にGUIを更新する方法です。あなたのwhileループは、EDT上にあり、それが実行されている間、それはGUIがフリーズなぜthatsのよう
SwingUtilities.invokeLater(new Runnable() {
public void run() {
Timer t = new Timer(100, new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
updateCardPanels();
}
});
t.setInitialDelay(0);
t.start();
}
});
Swingタイマーは、擬似ループとして使用できます。タイマーの各ティックでは、何らかの種類の状態変数を更新し、終了条件が成立したかどうかを判断し、残りの状態を更新しますあなたが普通に(ループで)そうでなければ – MadProgrammer
OK私はそれが働いていると思います。今私は別の問題があります:プログラムを続行する前に 'Timer'が終了するのを待つ方法はありますか? – CadeLikesToCode
終了した後に 'Timer'呼び出しを行います(つまり、終了条件が満たされた場合) – MadProgrammer