javafx-2 - javafx 后台任务未运行多次

标签 javafx-2 task

以下是我的任务初始化

        final Task<Void> vt=voiceTask();
        Button btn = new Button();
        btn.setText("Say");
        btn.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                new Thread(vt).start();
            }
        });

这是任务编码

public Task<Void> voiceTask() {
    return new Task<Void>(){
        @Override
        protected Void call() throws Exception {
            HelloWorld hw=new HelloWorld();// HelloWorld is simple .java class getting voice through sphinx
            updateMessage(hw.Hello());
            return null;

        }

    };
}     

现在,第一次单击 btn 按钮时,任务正常运行,但后续单击时,任务不会被调用。

我希望每次点击时都调用任务。 请建议我如何修改我的代码来做到这一点......

最佳答案

请参阅JavaDocs

As with FutureTask, a Task is a one-shot class and cannot be reused.

每次按下按钮时,您都需要创建一个新任务。

    final Button btn = new Button();
    btn.setText("Say");
    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            final Task<Void> vt=voiceTask();
            vt.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
                @Override
                public void handle(WorkerStateEvent event) {
                    btn.setDisable(false);
                }
            });
            btn.setDisable(true);
            new Thread(vt).start();
        }
    });

关于javafx-2 - javafx 后台任务未运行多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22694117/

相关文章:

listener - 以编程方式删除使用 FXML 添加的监听器?

Scala 相当于 .NET 的 Task.Factory.StartNew?

C# 并行运行任务并将每个任务与输入关联

concurrency - Futures : Rust vs runtime-based languages 的完成与就绪方法

window - JavaFX 2 : Prevent other Stages from stealing focus from primary Stage

jquery - JavaFX 2.2 中 WebView 并不真正支持 CORS?

java - 仅从 JavaFX ObservableList 中获取一些值

java - 使用 TableView.getItems() 观察 ObservableList?

c# - 如何在不使用 Task.Delay 或 await 的情况下编写异步方法

eclipse - 如何在 Eclipse 中启用 TODO/FIXME/XXX 任务标签?