我正在使用Java FX textarea,并用它来为正在进行的步骤提供信息。
步骤如下。复制文件。删除旧文件。复制新文件。然后将一些属性从旧文件复制到新文件。
当点击一个按钮时,整个步骤开始。
我面临的问题是,当我使用append命令时,文本区域没有被更新。
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");
}
其他功能也是如此。复制战争文件功能和删除战争文件功能需要时间,因为它将130 MB的文件从一个位置复制到另一个位置。
所以我希望文本区显示为,1。开始复制文件,一段时间后
但是问题是,在所有的函数都被执行之前,文本区域根本不会被填充。
如果我试图通过线程执行这些,那么执行顺序就没有保证。请帮忙
请问你能给一些代码摘录吗?
我经常犯类似的错误:concat返回连接字符串,并且不修改应用concat方法的字符串。
String firstString = "txt";
String resultString = firstString.concat(" next");
如果你的关注点真的与线程相关联,并且你的代码与你在文章中提到的代码很接近,我建议你通过并行线程复制数据,比如javafx.application.Platform.runLater(e-
编辑:正如James_D提到的,如果操作时间真的很长,你最好使用任务。阅读我链接的文章,了解更多关于替代方法及其用法的信息。
扩展批准的响应-如果您需要在执行其他操作之前等待更新的UI,请使用PlatformImpl。runAndWait(可运行可运行)
Thread thread = new Thread(() -> {
yourMethod();
PlatformImpl.runAndWait(() -> {
methodForUI();
});
methodAfterUIChanged();
});
thread.start();
在后台线程中运行< code>executeCmds()方法,并使用< code>Platform.runLater()更新文本区域:
public void executeCmds(){
Thread thread = new Thread(() -> {
createTempDirectory();
copyConfigPropetiesFileValues();
copyConfigProperties();
copyYMLFile();
copyYMLFileProperties();
stopTomcatServer();
deleteOldWar();
copyNewWar();
startTomcatServer();
copyOldConfigFile();
copyOldYMLFile();
});
thread.start();
}
然后
public void createTempDirectory(){
//Creating temporary directory for copying property files
updateStatus("Trying to create a temp directory \n");
File tempDir= new File(tomcat_path.getText()+filePath.path_to_temp_directory);
if(!tempDir.exists())
tempDir.mkdirs();
updateStatus("Created Temp directory to copy Config Files \n");
}
// similarly for other methods
private void updateStatus(String message) {
if (Platform.isFxApplicationThread()) {
status_text_area.appendText(message);
} else {
Platform.runLater(() -> status_text_area.appendText(message));
}
}
我有一个带有一些TextArea元素的GUI来显示信息。由于GUI将对keyevents做出反应,我在场景元素中添加了一个EventHandler。因为我不想为每个文本区域添加一个EventHandler,所以我禁用了它们以防止它们聚焦,因为这样场景的EventHandler就不再工作了。现在我有一个问题:文本显示为灰色,不再是黑色,尽管我在css文件中更改了它。你知道为什么文本不是黑色的吗?我该
我需要在我的程序中使用文本区域,我也需要它是只读的。 这是我创建textArea的主程序的一部分: 这是我的css文件的一部分: 如果我删除行:ta.setDisable(true);Css的工作方式就像我希望它工作一样。但是在我将禁用 true 设置为 true 之后,它只会使文本区域透明,这使得文本非常难以阅读,并且背景颜色也不是我想要的。 有没有其他方法可以只读设置文本?或者有没有办法在禁用
我使用的是JavaFX 8,有一个只读的TextArea,根据具体情况显示确认消息或错误消息。我希望确认消息有黑色文本,但我希望错误消息有红色文本。我如何在JavaFX 8中做到这一点?就目前而言,我更喜欢用编程的方式来完成,但是我当然也对如何在FXML中完成这个程序的下一个草案感兴趣。 从本质上讲,我正在显示一个 tableView,并让用户编辑 TableView 单元格中的信息。如果用户在单
我有一个如下的文本区域, 我需要突出显示或选择所有文本“Highlight me”。我没有找到任何方法来突出显示文本区域中的文本。此外,我在JavaFX中找不到任何其他API可以突出显示特定文本或字母的出现,例如Swing中的JTextArea。有人可以建议我如何在文本区域突出显示字符串吗?或者除了JavaFX中的这个文本区域之外,还有其他API可用吗? 我的代码: 预期输出: 线条应以以下任何颜
下面是我的代码的一个片段。调用filteredData()时,状态未更新。在状态更新之前,我必须单击按钮两次。这是一个旧项目,我正在使用钩子更新它。我以前在设置状态后使用了回调函数,但我不能用钩子实现。 }
主要内容:创建文本域,TextField文本,示例-1,实例-2,实例-3用于单行文本输入。请看下面的示例 - 和字段扩展了类,它是JavaFX中所有文本控件的超类。 上面的代码生成以下结果。 创建文本域 我们可以使用类的构造函数来创建文本字段。 只是一个带有光标的文本输入框,通常我们需要一个控件来告诉文本字段的目的。以下代码创建一个控件来标记对应的文本字段是用于名称输入。然后它创建一个对象。之后,它使用HBox布局和。 使用预定义文本创建文本字段。 TextField