我总是要在Swing中使用Worker Thread返回一些东西吗?如果我没有任何返回值怎么办?我只想使用工作线程来运行无限循环...那么返回什么?即使我在无限for循环之后写了一个伪返回语句,比如说返回0;那么它也可能会说“代码无法访问”。
答案 0 :(得分:3)
我怀疑你没有尝试过。您在评论中建议的代码应该可以正常工作:
public Object construct() {
for (;;) {
Node.execution();
Clock.incrementTimeTick();
System.out.println(Clock.getTimeInTick());
repaint();
}
// End of loop is unreachable, so no need for a return statement.
}
像这样的紧密循环对我来说似乎是一个坏主意,并且repaint()
代码需要在线程安全方面做得恰到好处,但它应该编译...
我个人更喜欢将while (true)
用于“永久”循环,但for (;;)
也应该有用。
答案 1 :(得分:2)
将工作人员实施为SwingWorker<Void, SomeObject>
,然后返回null
。欺骗编译器关于无限循环。根据运行时总是返回true
的某些方法来设置它。
答案 2 :(得分:1)
如下所示的方法将编译时没有任何编译错误:
public Object foo() {
for (;;) {
// do something ... or nothing
}
}
原因是根据JLS 14.21中规定的规则,for
循环后面的任何语句都无法访问。具体地
任何没有条件表达式的for
循环(或条件表达式是值为true
的编译时常量表达式)都无法“正常完成”。
块中的任何语句前面都有一个无法正常完成的语句,无法访问。