2014-04-11 3 views
0

Thread을 사용하여 ServerSocket을 시작하고 500ms보다 오래 걸리는 트랜잭션을 사용하고 있습니다.스레드가 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(); 
     } 
    } 
} 

내 응용 프로그램 충돌 내가 그것을 엽니 다

여기 내 코드입니다.

어떻게 이러한 오류를 해결할 수 있습니까?

내 로그 캣 :

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 in post을 추가했습니다. – user3465277

답변

1

문제가 당신이 할 수없는 비 UI 스레드에서 축배를 보여주기 위해 노력하고있다, 즉를 제거하고 작동합니다. 그런 다음 축배를 표시 할 경우

당신은 AsyncTask

+0

감사합니다. 일부 코드를 시도하고 작동하는지 확인합니다. – user3465277

0

당신은 당신이 UI 스레드에서 실행하는 데 필요한 조치를 AsyncTask를 사용하여 구현할 수 있습니다 사용하지만 다시 메인 스레드에 이상 호출 핸들러를 사용해야합니다 onProgressUpdate 및/또는 onPostExecute 함수에서. 매번 당신이 충돌을 얻을 - ADB 로그 캣에서 살펴 :

또한 해당 `

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와 같은 UI 스레드에서 코드의 조각을 실행하는 데 runOnUiThread을 사용할 수 있습니다 출력 먼저 Google에 오류 메시지가 표시됩니다.