Java 等待Runnables完成

Java 等待Runnables完成,java,multithreading,javafx,java-8,runnable,Java,Multithreading,Javafx,Java 8,Runnable,我在javafx中实现了一个程序,它动态生成一个输入掩码,并在单击该掩码上的按钮后生成一个Word文档 我在db表中定义了该掩码中可用的输入字段。 现在,我添加了对自定义过程的支持,这些自定义过程在程序的特定状态下执行(字段的onFocusLost、onChange等) 威奇做得很好 现在我被困在onGenerate执行中 渲染遮罩时,我持有一个Runnables列表,以存储生成时应执行的操作(在渲染时,我知道应该执行哪个操作。在生成时,我必须再次读取所有数据。因此,我认为我使用function

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

我在db表中定义了该掩码中可用的输入字段。 现在,我添加了对自定义过程的支持,这些自定义过程在程序的特定状态下执行(字段的onFocusLost、onChange等) 威奇做得很好

现在我被困在onGenerate执行中

渲染遮罩时,我持有一个
Runnable
s列表,以存储生成时应执行的操作(在渲染时,我知道应该执行哪个操作。在生成时,我必须再次读取所有数据。因此,我认为我使用
functional interface
保存操作。并且我不需要输入参数和返回值…因此我最终使用
Runnable

现在,如果我按下generate按钮,我将执行以下操作:

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

 generateWordDocument(); 

}
private void startGenerate(){
//main.getActionsBeforeRegenerate()==列表
main.getActionsBeforeRegenerate().forEach(action->action.run());
generateWordDocument();
}
文本已正确设置为节点,但在生成文档之后

在生成逻辑开始之前,如何更改文本字段

如果你需要更多的信息,请毫不犹豫地询问

编辑:

我想我已经找到了解决问题的办法:

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();
}
private void startGenerate(){
任务=新任务(){
@凌驾
公共布尔调用()引发异常{
main.getActionsBeforeRegenerate().forEach(action->action.run());
....
generateWordDocument();
....
返回Boolean.TRUE;
}
};
线程线程=新线程(任务);
setDaemon(true);
thread.start();
}

现在我在
generateWordDocument()

中有了新的值textField值,让我来表达我的理解;您想在GetActionsBeforeRegenerate()列表中的所有操作运行后启动生成逻辑吗?@UlukBiy是的。应该在生成我的文档之前更新掩码(现在操作被执行,但没有效果,因为文本字段在文档完成后而不是之前保存新值……因此新值不在生成的文档中)您所说的“生成了我的文档”是什么意思?它是常规的JavaFX(fxml)吗应用程序?即使稍后操作场景图,它也会得到更改。我的意思是,也许你不需要等待runnables完成。请显示一个SSCCE来演示problem@UlukBiy程序生成word文档(docx).Yes,这是一个常规的javaFx应用程序。让我来说明我的理解;您想在GetActionsBeforeRegenate()列表中的所有操作运行后启动生成逻辑吗?@UlukBiy Yes。应该在生成我的文档之前更新掩码(现在操作被执行,但没有效果,因为文本字段在文档完成后而不是之前保存新值……因此新值不在生成的文档中)您所说的“生成了我的文档”是什么意思?它是常规的JavaFX(fxml)吗应用程序?即使稍后操作场景图,它也会得到更改。我的意思是,也许你不需要等待runnables完成。请显示一个SSCCE来演示problem@UlukBiy该程序生成一个word文档(docx)。是的,它是一个常规的javaFx应用程序。
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();
}