2011-09-14 25 views
0

這是我第一次在堆棧溢出問這裏的問題,所以請耐心等待。 我會盡量保持這個簡短。Java線程似乎無法正常運行

我正在寫一個簡單的客戶端套接字android應用程序。 我要連接的服務器有一個名爲Alice的聊天機器人。 我已經設法連接到服務器,我收到消息「來自愛麗絲的你好」,但隨後線程似乎停止,因爲我沒有收到任何更多的消息。

下面是一些代碼:

@Override 
public void run() { 

    try 
    { 
     while (true) 
     { 
     String _input = _rd.readLine(); 
     if (_input != null) 
     { 
     _field.append("Alice : "+ _input+"\n"); 
     } 
     else 
     { 
      _field.append("null"); 
     } 
      sleep(50); 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    catch (InterruptedException e) { 
     e.printStackTrace(); 
    } 
} 

正如你可以看到我已經試圖通過將「空」即使我沒有收到消息來解決我的代碼,但是這既不是我的EditText所示。

當用戶按下按鈕時,我從主Activity類中調用.start()

 @Override 
     public void onClick(View arg0) { 

      setContentView(R.layout.second); 
      InitiateSecondFrame(); 

      _cs = new ClientSocket(); 
      String _check = _cs.EstablishConnection(_host.getText().toString(), 
        Integer.parseInt(_port.getText().toString()), 
        (EditText)findViewById(R.id.historyField)); 

      _cs.start(); 

      Toast.makeText(getApplicationContext(), _check, 100).show(); 
      SaveHostPort(_host.getText().toString(), _port.getText().toString());       
     } 
    }); 

ClientSocket類被Thread擴展並實現了Runnable,我也試過只是擴展或實現。 我根本沒有收到任何錯誤消息。 我希望我提供的信息足以讓你意識到發生了什麼問題。 記住我是多線程和套接字的新手,所以我可能錯過了一些基本的東西。

+0

我明白現在發生了什麼,感謝您的幫助! – Orujimaru

回答

0
_rd.readLine(); 

這裏是你的問題。它會阻止並永遠等待來自遠程系統的輸入,並且只會返回從遠程系統檢測到換行符時收到的內容。

+0

謝謝你的回答,如果我想連續檢查服務器是否向我發送了一條消息,我有什麼選擇? – Orujimaru

+0

您已經這樣做了:readLine塊直到收到一條線。 –

+1

養成了在遠程系統的輸入流上使用available()方法的習慣。它會讓您知道流中有多少字節可供讀取,0表示遠程端沒有數據。 – mcfinnigan

1

如果有幫助,這裏是你如何啓動一個線程:

Runnable runnable = new MyRunnableClass(); // has the run() method 
new Thread(runnable).start(); 
0

線程未停止。它只是在等待消息來臨。 _rd.readLine()將被阻塞,直到某行(以換行符結尾)被讀取,或者直到連接結束。因此,如果Alice保持連接打開並且不發送任何內容,readLine將永遠阻止,並且您的「空」消息將不會被打印。

+0

那麼,這是否意味着我的問題主要是服務器端? – Orujimaru

+0

不確定服務器端是否有問題。聊天通常意味着某種對話:愛麗絲告訴你「來自愛麗絲的你好」,而你沒有回答任何問題。如果我是愛麗絲,在交談之前我會期待一個答案。簡而言之:我對通信協議一無所知。愛麗絲是否應該發送比「來自愛麗絲的你好」更多的線? –

+0

我被告知聊天機器人可以交談,但我開始懷疑這一點。我已經聯繫了服務器管理員,但我還沒有收到答案。感謝您的幫助,至少我知道我的代碼應該是正確的。 – Orujimaru