2015-07-15 6 views
2

Возможно, кто-то будет знать, как решить эту проблему, потому что я не знаю. Я пытаюсь запустить мой класс, что расширяет задачу, в первый раз, когда я пытаюсь запустить это, он работает правильно (я использую это для progressBar). Когда первая операция выполняется по моей задаче, я пытаюсь выполнить следующий вызов, и она не работает, только индикатор выполнения показывает сообщение santitalization msg. Спасибо в любом случае/bw.JavaFX - Не удается запустить задачу снова

Вот код:

Декларация:

public class QueryCreator extends Service<Void>{ 

... 
//constructor 
.... 

@Override 
protected Task<Void> createTask() { 
return new Task<Void>(){ 
    @Override 
    protected Void call() throws Exception { 

     updateMessage("Init"); 
     // count is ;d count of queries 
     for(int i = 0 ; i < count ; i++){ 
      String queryString = ""; 

      .... 
      // creating string for query 
      .... 

      FileSaver.getInstance().writeLine(queryString); // instance of file where i put created queries 
      updateProgress(i+1,count); 
      int procent = ((i+1)*100)/count; 
      updateMessage("Done: " + procent + "" + "/100"); 
     } 

     FileSaver.getInstance().closeFile(); 
     updateMessage("File created"); 

     return null 
    } 
    }; 

} 

}

Использование:

.... 

Service<Void> QueryWorker = new QueryFileCreator(....); 

progressBar.progressProperty().unbind(); 
progressBar.progressProperty().bind(QueryWorker.progressProperty()); 

QueryWorker.messageProperty().addListener((obs, oldVal , newVal)- { 
    procentLabel.setText(newVal); 
}); 

FileSaver.getInstance().createFilePath(.....// filechooser //) ; // creating file path via filechooser 

QueryWorker.start(); 

.... 
+0

@jewelsea, который не является ответом –

+0

Можете ли вы проверить, есть ли исключение, и показать трассировку стека, если она есть? Насколько я могу судить по вашему коду, вы просто отказываетесь от каких-либо исключений. –

+0

О, я вижу, Каппер, вы редактировали код в вопросе от задачи к службе. Я удалил дубликат, так как теперь он совершенно другой. – jewelsea

ответ

0

(при условии, вашей программы выходит из метода цикла в вызове() и предполагая, что ваш метод обновления работает правильно), я предполагаю, что ваша программа вызывает следующий tas k перед предыдущим завершенным исполнением. Например, первая задача обновляет индикатор выполнения и обновляется только на 20%, а вторая задача - «перезапускать» обновление, однако это не может быть сделано, поскольку первая задача все еще работает с одним и тем же индикатором выполнения.

Смежные вопросы