【问题标题】:JavaFX - Can't run task againJavaFX - 无法再次运行任务
【发布时间】:2015-10-04 04:21:50
【问题描述】:

也许有人会知道如何解决这个问题,因为我不知道。我试图运行我的类扩展任务,当我第一次尝试运行它时它运行正常(我将它用于progressBar)。当我的任务完成第一个操作时,我正在尝试下一个调用但它不起作用,只有进度条显示初始化消息。无论如何谢谢/bw。

代码如下:

声明:

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();

....

【问题讨论】:

  • @jewelsea 这不是答案
  • 你能检查一下是否有异常被抛出,如果有异常则显示堆栈跟踪吗?据我从您的代码中可以看出,您只需丢弃任何异常。
  • 哦,我看到了 Kacper,您将问题中的代码从任务编辑为服务。我删除了重复的标志,因为它现在明显不同了。

标签: java multithreading javafx progress-bar task


【解决方案1】:

(假设您的程序在 call() 方法中退出 for 循环并假设您的更新方法正常工作)我的猜测是您的程序在前一个完成执行之前调用了下一个任务。例如,第一个任务更新进度条,它只更新了 20%,而第二个任务想要“重新开始”更新,但是它不能这样做,因为第一个任务仍然使用相同的进度条。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-27
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多