javafx后台任务不会运行多次

时间:2014-03-27 16:51:05

标签: 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按钮,任务正常运行,但是在点击后续任务时不会调用该任务。

我希望每次点击都能调用任务。 请告诉我如何修改我的代码...

1 个答案:

答案 0 :(得分:3)

请参阅JavaDocs

  

与FutureTask一样,Task是一次性类,不能重复使用。

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

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