2014-11-06 86 views
0

我需要做currentThread等一下,在UiThread做一些操作,然後在UiThread打電話currentThread().notify()。我正在嘗試這個代碼打電話Thread.wait()

Handler uiHandler = new Handler(Looper.getMainLooper()); 
uiHandler.post(new Runnable() { 
    @Override 
    public void run() { 
     try { 
      currentThread().wait(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     AlertDialog.Builder facultyChooser = new AlertDialog.Builder(ctx); 
     facultyChooser.setTitle("choose") 
       .setCancelable(false) 
       .setItems(arr, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int item) { 
         currentThread().notify(); 
        } 
       }) 
       .create() 
       .show(); 
     } 
    }); 
} 

但得到java.lang.IllegalMonitorStateException: object not locked by thread before wait()異常。請幫幫我。

回答

1

試試這個代碼:

final Thread CURRENT_THREAD = currentThread(); 
Handler uiHandler = new Handler(Looper.getMainLooper()); 
uiHandler.post(new Runnable() { 
    @Override 
    public void run() { 
     AlertDialog.Builder facultyChooser = new AlertDialog.Builder(ctx); 
     facultyChooser.setTitle("choose") 
       .setCancelable(false) 
       .setItems(arr, new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int item) { 
         synchronized(CURRENT_THREAD) { 
          CURRENT_THREAD.notify(); 
         } 
        } 
       }) 
       .create() 
       .show(); 
     } 
    }); 
} 
synchronized(CURRENT_THREAD) { 
     try { 
      CURRENT_THREAD.notify(); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
}