2014-03-06 130 views
0

我有這個線程瓦亭對的onTouchEvent()從活動中喚醒等待線程觸摸事件?

private Runnable disconnectCallback = new Runnable() { 
    @Override 
    public void run() { 
    // Perform any required operation on disconnect 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       Toast.makeText(getBaseContext(),"Your session expired Please Login again",Toast.LENGTH_SHORT).show(); 
       try { 
        wait(); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       final Logout l=new Logout(); 
       l.setContext(Ac2.this);// passing context of Ac3.java to Logout.java 
       l.execute(sessid,uname); 
      } 
     }); 
    } 
}; 

我想是當用戶觸摸手機屏幕通知此等待的線程..

回答

0
private Runnable disconnectCallback = new Runnable() { 
    @Override 
    public void run() { 
     // Perform any required operation on disconnect 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       Toast.makeText(getBaseContext(), 
         "Your session expired Please Login again", 
         Toast.LENGTH_SHORT).show(); 
       try { 
        synchronized (disconnectCallback) { 
         disconnectCallback.wait(); 
        } 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 

       final Logout l = new Logout(); 
       l.setContext(Ac2.this);// passing context of Ac3.java to 
             // Logout.java 
       l.execute(sessid, uname); 
      } 
     }); 
    } 
}; 

和onTouch事件調用:

disconnectCallback.notifyAll(); 
+0

它提供了以下錯誤:java.lang.IllegalMonitorStateException:由線程等待對象之前沒有鎖定() – user3371398

+0

呼叫等待功能也disconnectCallback,如:disconnectCallback.wait(); –

+0

順便說一句我建議在UI線程上運行以外的等待相關代碼。 –

0

試試這個

private Runnable disconnectCallback = new Runnable() { 
    @Override 
    public void run() { 
     // Perform any required operation on disconnect 
     runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       // TODO Auto-generated method stub 
       Toast.makeText(getBaseContext(), 
         "Your session expired Please Login again", 
         Toast.LENGTH_SHORT).show(); 

      } 
     }); 
     try { 
      synchronized(disconnectCallback){ 
      disconnectCallback.wait(); 
      final Logout l=new Logout(); 
      l.setContext(Ac2.this);// passing context of Ac3.java to Logout.java 
      l.execute(sessid,uname); 

      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 


    } 
}; 

內onTouch

synchronized (disconnectCallback) { 
     disconnectCallback.notify(); 
    } 
+0

您是否正在註銷內進行與UI相關的任務? – Sonali8890

+0

發生以下錯誤:完成的活動(在應用程序MyapplicationName中)未響應 – user3371398

+0

In Logout.java它調用一個php文件並移至登錄屏幕(上一活動) – user3371398