2016-04-24 10 views
0

SwingUtilities.invokeLaterRunnableのインターフェイスでイベントを待っているループが無限ループしていますが、実行が継続していません...なぜですか?無限ループのSwingUtilities.invokeLaterは継続しませんか?

//here hello3 prints in cmd but hello2 will not execute 
System.out.println("hello3"); 

//showMessage(); 
SwingUtilities.invokeLater(
    new Runnable(){ 
     public void run() { 
      while(true) { 
       jEditorPane1.setText(s9); 
      } 
     } 
    } 
); 

System.out.println("hello2"); 
+0

[同時実行のスイング](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)から始めてください。あなたはEDTをブロックしています。 'invokeLater'は、将来のある時点でEDTの' Runnable'メソッドを実行します。 – MadProgrammer

答えて

3

SwingUtilities.invokeLaterはイベントディスパッチスレッド内でrunメソッドを実行します。

私たちが表示したコードがすべてイベントディスパッチスレッド内で実行されている場合(例えばactionListener内で実行されている場合)、スレッドは無限ループ内で「フリーズ」状態になります。

+0

それはどんなハンドラでもありません.netbeansを使ってGUIを設計しますが、すべてのguiコードを一つのswingutilities.invokelaterで生成します。私はこのクラスからこのクラスから作成されたオブジェクトを使用して呼び出すこのクラスにこのコードを含む別のメソッドを作成します。 – Theon

+0

'Forum_main fm = new Forum_main(); fm.setVisible(true); fm.getdata(uid、tid); 近い();。 }; ' – Theon

+0

はitheクラスの呼び出しはmain'java.awt.EventQueue.invokeLater内でこの – Theon