I have the following code:
public void post(String message) {
final String mess = message;
(new Thread() {
public void run() {
while (true) {
try {
if (status.equals("serviceResolved")) {
output.println(mess);
Game.log.fine("The following message was successfully sent: " + mess);
break;
} else {
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
} catch (NullPointerException e) {
try {Thread.sleep(1000);} catch (InterruptedException ie) {}
}
}
}
}).start();
}
在我的日志文件中,我发现了很多类似这样的行:
。
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
The following message was successfully sent: blablabla
我的程序没有响应。
我觉得break
命令不起作用。可能的原因是什么?
有趣的是,这种情况并非总是发生。有时我的程序可以正常工作,有时会出现上述问题。
NullPointerException
似乎不是一个好主意(它是否应该检查status == null
- 如果是,请检查status
是否为null
)。而InterruptedException
应该被设置为退出循环(虽然我不喜欢线程中断,但它确实存在,因此应该处理)。/ 另外,您可以将参数final
化,这样就不需要复制mess
了。 - Tom Hawtin - tacklineNullPointerException
的捕获。你永远不应该捕获RuntimeException
。它们表示代码/程序员错误,应通过正确重写代码来修复,而不是通过捕获它们来解决。无论如何,永远不要忽略/吞噬已捕获的异常,总是记录它们。 - BalusC