2011-09-27 10 views
3

私のエラーメッセージをJLabelで一時的に表示してから、テキストを ""に戻したいと思っています。しかし代わりに、メッセージの設定をスキップするように見えます。私はコードを踏んで、それがテキストを設定していることを発見しましたが、何らかの理由で表示されません。私はrepaint()メソッドを試してみましたが、まだ何もしていません。どんな助けでも大歓迎です。JLabelテキストを1秒間表示するにはどうすればいいですか?

は、ここで私が持っているものだ:私はあなたがイベントディスパッチスレッド上でこのメソッドを呼び出していることを仮定してい

public void displayError(String msg){ 
    int ctr = 0; 
    while(ctr<2){ 
     try { 
      lblError.setText(msg); 
      lblError.repaint(); 
      Thread.sleep(500); 
     } catch (Exception e) {} 
     ctr++; 
    } 
    lblError.setText(""); 
} 
+0

tryブロックを離れるときに実際に発生しています。特に例外を飲み込んでいるからです。テキストを同じ値に2回設定したいと思う理由がわかりません。 – Thor84no

+3

[Swing Timersの使い方](http://download.oracle.com/javase/tutorial/uiswing/misc/timer.html)を参照してください。 – trashgod

+0

私がやりたいことを示すために例外処理を取り出しました。 whileループは、テスト目的のためのものでした。 Thread.sleep()の前と後の両方で変更したいと思っていました。そのメソッドのミリ秒数をテストする限り、これは私と弟のための非常に小さなアプリケーションであることに留意してください。そのようなものが間違ってしまうと、それはあまり有害ではありません。ゲームやアニメーションを作ったのですが、私はあなたのことを間違いなく見ています。入力いただきありがとうございます。 – user967870

答えて

8

Thread.sleep()のためにスレッドが制御を再開できるようにする必要があります。タイマーまたはSwingWorkerバックグラウンドスレッドを呼び出す代わりに、2秒後にテキストをリセットします。私は実際にラベル部分であなたを助けるためにスイングについて十分に覚えていないが、私はちょうど私があなたがミリ秒単位の数は、あなたがのThread.sleepで指定したと仮定してはならないことを指摘しなければならない

http://download.oracle.com/javase/tutorial/uiswing/concurrency/dispatch.html

+1

Swing.Timerを使用し、それは魅力的なように機能しました。ありがとう。 – user967870

関連する問題