2011-11-20 89 views
0

這段代碼有什麼問題?當我像這樣實現它時,我的應用程序正常工作。Android thread.start()和runOnUiThread(thread);

public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     textOut = (EditText) findViewById(R.id.textout); 
     IPAddress = (EditText) findViewById(R.id.editTextIPAddress); 
     Button buttonSend = (Button) findViewById(R.id.send); 
     Button buttonSet = (Button) findViewById(R.id.set); 
     textIn = (TextView) findViewById(R.id.textin); 
     buttonSend.setOnClickListener(buttonSendOnClickListener); 
     buttonSet.setOnClickListener(buttonSetOnClickListener); 


     Thread myThread = new Thread() 
     { 
      public void run() 
      { 
       runClient(); 
      }// end method run 
     };// end myThread 
    }// end method onCreate 

但是當我這樣實現它。它強制關閉:

​​3210

我能夠嘗試這一點,但它改變了程序的邏輯:

Button.OnClickListener buttonSetOnClickListener = new Button.OnClickListener() 
    { 

     @Override 
     public void onClick(View arg0) 
     { 
      runOnUiThread(myThread); 
     }// end method onClick 
    }; 

    Thread myThread = new Thread() 
    { 
     public void run() 
     { 
      runClient(); 
     }// end method run 
    };// end myThread 

第一代碼運行MyThread的一次的onCreate()被調用。問題是我想在按下按鈕後運行myThread。但是這樣做會導致部隊關閉。什麼導致這個力量關閉,一旦按下按鈕,我該怎麼做才能運行線程?

+0

第一個沒有Thread.start調用,這樣就無法運行你的線程。它只是創建線程的一個實例。從onClick開始線程即可。但是你應該發佈你的logcat消息,否則幾乎不可能找出錯誤原因。 – slkorolev

+0

@slkorolev哦,是的,對不起,我忘了在這篇文章中添加myThread.start(),但是當我測試它時,我的程序中有這條線。我實際上不知道如何獲得我的logcat消息。它如何完成日食? –

+0

您在Eclipse中有一個特殊的logcat視圖。通常它位於代碼窗口下。查找LogCat選項卡標題。如果你最大化它,你可以找到異常堆棧的錯誤消息。 – slkorolev

回答