Я думал об этом часами, и я не ближе к решению!Мой поток просто перестает зацикливаться, когда я по какой-то причине извлекаю сообщение с сервера, и прекрасно работает, когда я этого не делаю.
Это работает и печатает обновление каждую секунду:
public class ChatRoom extends Activity implements OnClickListener, Runnable {
private Thread t = new Thread(this);
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chatroom);
Button send = (Button) findViewById(R.id.send);
send.setOnClickListener(this);
Intent receiver = getIntent();
String host = receiver.getStringExtra("Host");
int port = receiver.getIntExtra("Port", 4456);
try
{
socket = new Socket(host, port);
this.receive = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
this.send = new PrintWriter(this.socket.getOutputStream(), true);
}
catch(IOException ioe) { System.out.println(ioe); }
t.start();
}
public void run()
{
String message = "";
while(true)
{
try
{
// message = receive.readLine(); BufferedReader
t.sleep(1000);
}
//catch(IOException ioe) { System.out.println(ioe); }
catch (NullPointerException npe) { System.out.println(npe); }
catch (InterruptedException e) { System.out.println(e); }
System.out.println("Refreshing...");
}
}
когда я использую свой закомментированный код, он на самом деле работает, и я получаю сообщение от сервера, но он зацикливается только один раз!Это почему?
Output:
Server Message
Refreshing...
Я не получаю никаких исключений или ошибок, но раньше у меня была ошибка с некоторым подобным кодом, который сказал, что я не могу изменить интерфейс в других потоках.Так что я смотрел на какой-то runOnUiThread, но он не улучшил его, и я не знаю, почему он должен: (