2012-02-14 6 views
0

私は質問をする前にいくつかのコードを投稿させてください。Java:UIをブロックせずにスレッド結果を待つ?

public Object returnSomeResult() { 
    Object o = new Object(); 
    Thread thread = new Thread(this); 
    thread.start(); 
    return o; 
} 

public void run() { 
    // Modify o. 
} 

ので、方法returnSomeResultは、UIスレッドから呼び出されます。別のスレッドを開始します。今、スレッドが計算を終了するまで待つ必要があります。そして、一方、私はUIスレッドをブロックしたくありません。コードを以下のように変更した場合。 UIスレッドはブロックされます。私はそれがUIスレッドをブロックさせる、synchronized(this)を使用していますので、

public Object returnSomeResult() { 
    Object o = new Object(); 
    Thread thread = new Thread(this); 
    thread.start(); 
    try { 
     synchronized(this) { 
      wait(); 
     } 
    catch(Exception e) { 
    } 
    return o; 
} 

public void run() { 
    // Modify o. 
    try { 
     synchronized(this) { 
      notify(); 
     } 
    catch(Exception e) { 
    } 
} 

は、私は確信しています。 UIスレッドをブロックせずに、どうすればいいですか?

+5

は、ブロッキングと同義である待って、発信者に応じたカスタムコードのパラメータを追加することができますswingworker

public SwingWorker<Object,Void> returnSomeResult() { SwingWorker<Object,Void> w = new SwingWorker(){ protected Void doInBackground(){ Object o; //compute o in background thread return o; } protected void done(){ Object o=get(); //do something with o in the event thread } } w.execute(); return w;//if you want to do something with it } 

を使用することができます。ケーキを食べて食べることはできません。 – SLaks

答えて

3

あなたは

関連する問題