2017-12-21 7 views
1

私は現在、Javaスイングでミニゲームをプログラミングしています。私はGUIをセットアップして、ゲームは一連の数字が画面上で点滅してから消えていくというものです。ユーザーは数字が表示された順番で再び入力されなければなりません。Thread.sleep()なしのGUIを含むJavaプログラムの遅延

番号が最初に表示されたとき、私は彼らが1〜2秒間表示し、消え、そして1〜2秒間、別の番号を持つようにしたいなど

しかし、私は遅延の問題を抱えています数字が表示されている間、プログラム。以前の数字などを隠して全体のプログラムを一時停止するので、私はThread.sleepを使うことはできません。ちょうどうまくいきません。私は私が出会ったすべての他の提案を試しましたが、いずれもまだ働いていませんでした。

誰もがもうヒントを得ましたか?

+1

あなたがスレッドを試みた何気圧、おそらくしようとしているかを示すあまりに – dave

+1

'Timer'オブジェクト –

+0

https://docs.oracle.comを使用します/javase/tutorial/uiswing/misc/timer.html –

答えて

0
int delay = 5000; // delay in milliseconds 

ActionListener taskPerformer = new ActionListener() { 
    public void actionPerformed(ActionEvent evt) { //...Perform a task... } }; 
    Timer timer = new Timer(delay, taskPerformer); 
    timer.setRepeats(false); 
    timer.start(); // timer starts - after delay time your task gets executed 

Source

0

あなたはのThread.sleepを(使用することができます)

あなたはSwingのユーザーインターフェイススレッドからUIを更新しようとしているので、あなたが持つ問題がある可能性があります。これはSwingコンポーネント用に予約されているスレッドなので、UIへのクイックアップデート以外は何もしないでください。

public void prog() { 
    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      label.setText("1"); 
     } 
    } 

    try { 
     Thread.sleep(5000); 
    } catch(Exception e) { } 

    SwingUtilities.invokeLater(new Runnable() { 
     @Override 
     public void run() { 
      label.setText("2"); 
     } 
    } 
} 

public static void main(String[] args) { 
    label = new JLabel("0"); 

    prog(); 
} 

JLabel label 

UIは、コンポーネントの相互作用がActionListenerに実装される必要があるため、応答し続ける必要があります。しかし、待機中に他の作業を実行したい場合や、ActionListenerのactionPerfomed()メソッドにその機能が含まれている場合は、新しいスレッドを5秒間寝かしてからUIを更新することができます。また、UIをブロックすることなくスリープする代わりに、計算に5秒かかる計算を実行することもできます。コードは次のようになります。

(new Thread(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      Thread.sleep(5000); 
     } catch (Exception e) { } 

     SwingUtilities.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       label.setText("2"); 
      } 
     } 
    } 
}).start(); 
関連する問題