2016-06-19 4 views
-2

スイングカウントダウンタイマーを使用して何かをするプログラムを作成する必要があります(この場合、コンソールに文字列を表示します)。それはスピナーから必要な遅延情報を取得し、私がスタートボタンを押すとコードを実行します。しかし、スピナーに値を入力すると、何秒も何秒も待ってから、何も印刷しないで実行を終了します。Javaスイングタイマーが欲しいものを実行しません

private void StartActionPerformed(java.awt.event.ActionEvent evt) {          

    int x = (int) Spinner1.getValue() * 1000; 
    Timer TIMER = new Timer(x, new MyActionListener()); 

    TIMER.start(); 

    try { 
    Thread.sleep(x * 2); 

    } catch (InterruptedException e) { 
    } 

    TIMER.stop(); 
} 

class MyActionListener implements ActionListener { 

    public void actionPerformed(ActionEvent e) { 
    System.out.println("Something"); 
    } 

} 

ご協力いただければ幸いです!

+1

[MCVE] – STaefi

+1

コードラインとブロックをインデントする論理的で一貫した形式を使用してください。インデントは、コードの流れをより簡単にするためのものです。 –

+1

「Thread.sleep(x * 2);」とのナンセンスは何ですか? –

答えて

0

問題は、自分でロックアウトしていることです。

Thread.sleep(x * 2); 

あなたのActionListenerを実行しますEventDispatchThreadをブロックしています。それでもタイマーは内部的にタイムアウトが発生し、次の可能な時間にActionListenerを実行する必要があるというフラグを保持しています。通知が失われているように

しかし

TIMER.stop(); 

は、タイマをリセットされます。

関連する問題