等待Runnables完成

时间:2015-08-03 08:51:24

标签: java multithreading javafx java-8 runnable

我在javafx中实现了一个程序,它动态生成一个输入掩码,并在按下该掩码后生成一个Word文档。

我在db-table中定义了哪个输入字段在此掩码中可用。 现在我添加了对我的程序的特定状态执行的自定义过程的支持(onFocusLost of a field,onChange,...) 这很完美。

现在我被困在onGenerate执行中。

当我渲染蒙版时,我拿着一个Runnable列表来存储我应该在生成时执行的动作(在渲染时我知道应该执行哪个动作。在生成时我必须再次读取所有数据。所以我认为我用FunctionalInterface保存了动作。我不需要inputParameter而且没有ReturnValue ......所以我最终得到Runnable

TextField tf = ...;
String s = ...;

actionsBeforeGenerate.add(() -> {
                tf.setText(s);
            });

现在,如果我按下生成按钮,我会执行以下操作:

private void startGenerate(){
 //main.getActionsBeforeGenerate() == List<Runnable>
 main.getActionsBeforeGenerate().forEach(action -> action.run());

 generateWordDocument(); 

}

文本在文档生成后正确设置为节点。

如何在我的generationLogic启动之前更改textField?

如果您需要更多信息,请不要犹豫。

修改

我想我找到了解决问题的方法:

private void startGenerate(){

Task<Boolean> task = new Task<Boolean>() {          

@Override
public Boolean call() throws Exception {
    main.getActionsBeforeGenerate().forEach(action -> action.run());
    ....
    generateWordDocument();
    ....
    return Boolean.TRUE;
  }
};



Thread thread = new Thread(task);
thread.setDaemon(true);
thread.start();
}

现在我在generateWordDocument()

中提供了新值textField值

0 个答案:

没有答案