使用工作线程时返回语句

时间:2011-07-04 13:50:10

标签: java swing thread-safety worker-thread

我总是要在Swing中使用Worker Thread返回一些东西吗?如果我没有任何返回值怎么办?我只想使用工作线程来运行无限循环...那么返回什么?即使我在无限for循环之后写了一个伪返回语句,比如说返回0;那么它也可能会说“代码无法访问”。

3 个答案:

答案 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循环后面的任何语句都无法访问。具体地

  1. 任何没有条件表达式的for循环(或条件表达式是值为true的编译时常量表达式)都无法“正常完成”。

  2. 块中的任何语句前面都有一个无法正常完成的语句,无法访问。