我正在使用Java FX文本区域,并将其用作提供步骤信息的方式。
步骤如下。 复制文件。 删除旧文件。 复制新文件。 然后从旧文件复制一些属性到新文件中。
整个步骤是在单击按钮时开始的。
我面临的问题是,当我使用附加命令时,文本区域不会立即更新。
附加命令添加数据,当函数终止时,我将所有文本放在一起。 我希望调用函数时文本区域能够更新。
在我的程序中,复制文件操作需要一些时间,因为它是一个大文件。 所以在开始时,我显示消息,表示操作已经开始。 在操作结束时,我想要显示操作已经结束。
但是文本区域会将所有这些文本一起显示。
我在Oracle论坛上读到了,FX中的文本区域使用单个线程,因此在整个过程完成之前不会显示任何内容。
文章:https://community.oracle.com/message/9938117#9938117 有人可以建议我该怎么做吗?
新编辑
好的,在单击按钮时,我调用一个函数来执行以下方法。
现在每个函数都是一个进程,应该按顺序执行。在每个步骤完成后,我想要更新GUI文本区域,显示成功消息,表示已经完成。
为此,我使用以下方法:
步骤如下。 复制文件。 删除旧文件。 复制新文件。 然后从旧文件复制一些属性到新文件中。
整个步骤是在单击按钮时开始的。
我面临的问题是,当我使用附加命令时,文本区域不会立即更新。
附加命令添加数据,当函数终止时,我将所有文本放在一起。 我希望调用函数时文本区域能够更新。
在我的程序中,复制文件操作需要一些时间,因为它是一个大文件。 所以在开始时,我显示消息,表示操作已经开始。 在操作结束时,我想要显示操作已经结束。
但是文本区域会将所有这些文本一起显示。
我在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");
}
其他函数也是这样。复制war文件和删除war文件函数需要时间,因为它将130 MB的文件从一个位置复制到另一个位置。
所以我希望文本区域显示为:
- 开始复制文件
过一段时间后
- 文件已复制
但问题是,文本区域根本不会填充,直到所有函数都执行完毕。
如果我尝试通过线程来执行它们,则无法保证执行顺序。请帮忙解决。