【发布时间】:2016-08-06 22:09:15
【问题描述】:
我正在使用 Java FX textarea 并使用它来为正在进行的步骤提供信息。
步骤如下。 复制一个文件。 删除旧文件。 复制新文件。 然后将一些属性从旧文件复制到新文件。
这整个步骤从单击按钮开始。
我面临的问题是,一旦我使用附加命令,文本区域并没有被更新。
append 命令添加数据,当函数终止时,我将所有文本放在一起。 我希望在调用函数时更新文本区域。
在我的程序中,复制文件操作需要一些时间,因为它是一个大文件。 因此,在开始时,我会显示操作已开始的消息。 并且在操作结束时我想显示操作已经结束。
但是文本区域会同时显示所有这些文本。
我在 oracle 论坛上看到,FX 中的文本区域使用单个线程,因此在整个过程完成之前不会显示任何内容。
文章:https://community.oracle.com/message/9938117#9938117
谁能建议我该怎么做?
新编辑
点击按钮确定我正在调用一个执行以下方法的函数。
public void executeCmds(){
createTempDirectory();
copyConfigPropetiesFileValues();
copyConfigProperties();
copyYMLFile();
copyYMLFileProperties();
stopTomcatServer();
deleteOldWar();
copyNewWar();
startTomcatServer();
copyOldConfigFile();
copyOldYMLFile();
}
现在每个函数都是一个进程,应该顺序执行。在每个步骤完成后,我想用成功消息更新 GUI 文本区域。
对于我使用的方法如下:
public void createTempDirectory(){
//Creating temporary directory for copying property files
status_text_area.appendText("Trying to create a temp directory \n");
File tempDir= new File(tomcat_path.getText()+filePath.path_to_temp_directory);
if(!tempDir.exists())
tempDir.mkdirs();
status_text_area.appendText("Created Temp directory to copy Config Files \n");
}
其他功能也是如此。 copyWar 文件功能和删除 warfile 功能需要时间,因为它将 130 MB 文件从一个位置复制到另一个位置。
所以我希望 textarea 显示为, 1.开始复制文件 一段时间后
- 文件已复制。
但问题是,文本区域根本不会填充,直到所有函数都执行完毕。
如果我尝试通过线程执行这些,则无法保证执行顺序。 请帮忙
【问题讨论】:
-
以Concurrency in JavaFX 开头,对应example。
-
相关例子见here。
标签: java multithreading oracle javafx javafx-2