Оператор возврата при использовании рабочего потока - PullRequest
0 голосов
/ 04 июля 2011

Всегда ли мне нужно что-то возвращать, используя Worker Thread в Swing?Что если у меня нет возвращаемого значения?Я просто хочу использовать рабочий поток для запуска бесконечного цикла for ... так что же возвращать?и даже если я напишу фиктивный оператор return после бесконечного цикла for, скажем, например, return 0;тогда также, вероятно, будет написано «код недоступен».

Ответы [ 3 ]

3 голосов
/ 04 июля 2011

Я подозреваю, что вы еще не пробовали.Код, который вы предложили в комментарии, должен работать нормально:

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 (;;) тоже должно работать.

2 голосов
/ 04 июля 2011

Реализуйте работника как SwingWorker<Void, SomeObject> и просто верните null. Обмани компилятор по поводу бесконечного цикла. Сделайте это в зависимости от какого-либо метода, который во время выполнения всегда возвращает true.

1 голос
/ 04 июля 2011

Метод, подобный следующему, будет компилироваться без ошибок компиляции:

public Object foo() {
    for (;;) {
        // do something ... or nothing
    }
}

Причина в том, что любой оператор, следующий за циклом for, недоступен в соответствии с правилами, изложенными в JLS 14.21 . В частности

  1. Любой цикл for без выражения условия (или выражения условия, являющегося выражением константы времени компиляции со значением true) не может "нормально завершиться".

  2. Любой оператор в блоке, которому предшествует оператор, который обычно не может завершиться, недоступен.

...