问题描述
我在执行外部进程时更新我的 JavaFX 应用程序的视图时遇到问题。在下面的代码中,在while
中,我放了一些代码来显示已执行进程的状态。
System.out.println(line);
完美运行,我在控制台中看到了进程的输出。
但是 tStatus.setText(line);
没有效果
refreshListFilesDestination()
都不是
有人知道我做错了什么吗?
谢谢
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe","/c","java -jar \"c:\\Program Files (x86)\\jsignpdf\\jsignpdf.jar\" -kst WINDOWS-MY " + stringFilesList + " -d " + fieldDirectoryDestination.getText() + " -V");
builder.redirectErrorStream(true);
try {
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) {
break;
}
System.out.println(line); // this work fine I see all the outpout comming in the console
tStatus.setText(line); // Don't work,except at the very end
refreshListFilesDestination(); // This is a method who refresh a list of files,it Don't work
}
} catch (Exception e1) {
tStatus.setText("Command return an error");
}
解决方法
JavaFx 不知道您所做的更改。最好绑定,类似这样:
tStatus.textProperty().bind(line)
在您的情况下,可能需要更改文本字段的变量(使其在您定义 textfield
的类中并使其可设置),那么当您只使 {{1 }}。
改变
tStatus.setText(line);
到
Platform.runLater(() -> tStatus.setText(line));
或
Platform.runLater(new Runnable() {
@Override
public void run() {
tStatus.setText(line);
}
});