Проблема реализации Java Swing работник - PullRequest
1 голос
/ 09 февраля 2011

Я только что узнал о выполнении свинг-фоновых задач и начинаю экспериментировать с ним, но у меня возникли небольшие проблемы с реализацией. Мой код извлекает изображение и возвращает результат (целое число), который указывает, был ли поиск изображения успешным результатом = 0 или неудачным результатом = -1. Вот моя проблема, я получаю результат слишком рано. Я могу видеть операторы в методе createImage в коде ниже, выполняющемся после того, как результат прочитан в методе done (). Я думаю, я думал, что готовый метод не будет выполняться, пока не будет создан createImage. Вот мой код ниже:

new SwingWorker<int[], Void>() {
int result = -1;
@Override
protected int[] doInBackground() throws Exception {
 // TODO Auto-generated method stub
return createImage();  //returns an integer array of size one indicating the result
                    }

protected void done() {
try {
result = get()[0];  //this result is being read before createImage is done  
                        //executing.  Why?
thisApplet.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
tree.setEnabled(true);
if (result == -1){
    tree.setSelectionPath(null);
     return;
}
   } catch (InterruptedException e) {                                 
         e.printStackTrace();
    } catch (ExecutionException e) {                          
            e.printStackTrace();
    }
      }
}.execute();

1 Ответ

2 голосов
/ 09 февраля 2011

Метод done не будет выполнен, пока метод doInBackground не будет завершен.Так что здесь должно быть что-то еще.Я предполагаю, что вы могли бы вызывать done и doInBackground вместо run ()?Если нет, попробуйте найти проблему, создав SSCCE.

...