私がしようとしている:これは簡単であるべきJLabelの 奇妙なバグ - どのようにJavaプログラムを一時停止するには?
に新しいテキストを書き、その後2秒間、
- 表示JLabelの中のテキスト、
- 待ちしかし、私は奇妙なバグを取得する: 最初のテキストは決して書かれていない、アプリケーションは2秒待ってから最終的なテキストを表示します。ここでのサンプルコードは、次のとおりです。このコードは、テキストと
private void testButtonActionPerformed(java.awt.event.ActionEvent evt) { displayLabel.setText("Clicked!"); // first method with System timer /* long t0= System.currentTimeMillis(); long t1= System.currentTimeMillis(); do{ t1 = System.currentTimeMillis(); } while ((t1 - t0) < (2000)); */ // second method with thread.sleep() try { Thread.currentThread().sleep(2000); } catch (InterruptedException e) {} displayLabel.setText("STOP"); }
「をクリック!」決して表示されません。私はちょうど2秒 - 一時停止し、次に "停止"テキストを取得します。 ループ、またはThread.sleep()でSystemタイマーを使用しようとしましたが、両方のメソッドで同じ結果が得られます。
(sigh)EDT(Event Dispatch Thread)をブロックしないでください。 'Thread.sleep(n)'を呼び出す代わりにSwingタイマーを実装するか、 'SwingWorker'を使って長時間実行するタスクを実行します。詳細は、[Swingの同時実行性](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)を参照してください。 –