2014-04-11 67 views
0

我正在使用Thread來啓動我的ServerSocket,而我的事務處理時間超過500毫秒。非UiThread的線程

我認爲這觸發了一些「應用程序沒有響應」的消息。

我試圖創建一個線程,將其與UiThread分開。

這裏是我的代碼:

Thread socketServerThread=new Thread(new ServerSocketThread()); 
     socketServerThread.start(); 

public class ServerSocketThread extends Thread { 
    static final int SocketServerPORT = 8080; 
    int count = 0; 

    @Override 
    public void run() { 
     try { 
      serverSocket = new ServerSocket(SocketServerPORT); 

      Toast.makeText(getApplicationContext(), "server is on", Toast.LENGTH_SHORT).show(); 

      while (true) { 
       Socket socket = serverSocket.accept(); 

      } 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

我的應用程序崩潰時我打開它。

我該如何解決這些錯誤?

我的logcat:

04-11 21:57:23.864: E/AndroidRuntime(11761): FATAL EXCEPTION: Thread-11 
04-11 21:57:23.864: E/AndroidRuntime(11761): java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare() 
04-11 21:57:23.864: E/AndroidRuntime(11761): at android.os.Handler.<init>(Handler.java:121) 
04-11 21:57:23.864: E/AndroidRuntime(11761): at android.widget.Toast.<init>(Toast.java:68) 
04-11 21:57:23.864: E/AndroidRuntime(11761): at android.widget.Toast.makeText(Toast.java:231) 
04-11 21:57:23.864: E/AndroidRuntime(11761): at com.example.imagesender.MainActivity$ServerSocketThread.run(MainActivity.java:79) 
04-11 21:57:23.864: E/AndroidRuntime(11761): at java.lang.Thread.run(Thread.java:1019) 
+0

以及什麼是錯誤 – tyczj

+0

沒有堆棧跟蹤,沒有答案。 – njzk2

+0

在帖子中添加了logcat。 – user3465277

回答

1

問題是你試圖顯示來自非UI線程,你不能做一個麪包,刪除和它應該工作。

如果你想顯示敬酒,那麼你必須使用一個處理程序來調用回主線程或更好,但使用AsyncTask

+0

謝謝,我會嘗試做一些代碼,並嘗試是否會工作。 – user3465277

0

您可以使用AsyncTask並實現你需要在UI線程運行的操作onProgressUpdate和/或onPostExecute函數。

您也可以使用runOnUiThread對UI線程執行一段代碼,這樣 `

public void run() { 
    // custom thread actions 
    mActivity.runOnUiThread(new Runnable() { 
     public void run() { 
      // code that should be run on UI Thread 
     } 
    }); 
    // custom thread actions 
} 

`

PS:每次你得到一個崩潰 - 看看亞行logcat輸出第一個和谷歌有關您的程序的任何錯誤消息。