【发布时间】:2011-05-20 18:16:47
【问题描述】:
我正在尝试使用 Handler 让一些代码在一段时间内执行。
这在我的 2 个课程中效果很好,但我遇到了这个问题:
我的一个类扩展了 Activity,并启动了一个线程(实现了 Runnable)。
在我的 run() 方法中,和其他类一样:
mHandler = new Handler();
mHandler.removeCallbacks(StopRequest);
mHandler.postDelayed(StopRequest, 30000);
程序似乎在抱怨:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
我不明白为什么要发布,有人可以帮我吗?
编辑:添加部分代码:
out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(clientSocket.getOutputStream())), true);
out.println("VOICE_CALL_REQUEST");
// Wait for a response
// Set a timer (about 30 seconds)
mHandler = new Handler();
mHandler.removeCallbacks(StopRequest);
mHandler.postDelayed(StopRequest, 3000);
// Ready reply
InputStream stream = clientSocket.getInputStream();
BufferedReader data = new BufferedReader(new InputStreamReader(stream));
String line = data.readLine();
mHandler.removeCallbacks(StopRequest); // Timer is removed here
如果计时器达到 30 秒:
// Stop a call request after some amount of time
private Runnable StopRequest = new Runnable() {
public void run() {
// Send a message to cancel the voice call
out.println("VOICE_CALL_CANCEL");
// Close the port
try {
clientSocket.close();
}
catch (IOException e) { finish(); }
}
};
非常感谢,
杰瑞
【问题讨论】: