我想从javafx应用程序启动一些python脚本。 要启动脚本,我使用以下代码:
private String executeCommand(String command) {
StringBuffer output = new StringBuffer();
Process p;
try {
System.out.println(command);
p = Runtime.getRuntime().exec(command);
p.waitFor();
BufferedReader reader =
new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
while ((line = reader.readLine())!= null) {
output.append(line + "\n");
}
} catch (Exception e) {
e.printStackTrace();
}
return output.toString();
}
public void launchCommand(String inputDir, String outputDir) {
String command = ".\\venv\\Scripts\\python.exe ./test.py -i " + inputDir + " -o " + outputDir;
String output = this.executeCommand(command);
System.out.println(output);
}
问题是脚本是由javafx图形线程启动所以行
p.waitFor();
会锁定javafx线程,所以我的gui停止响应......
我不知道如何解决这个问题...... 提前感谢您的帮助!
答案 0 :(得分:2)
只需在后台线程中运行脚本,并确保使用Platform.runLater(...)
或通过将命令封装为Task
并使用{{}来更新FX应用程序线程上的GUI。 1}}处理程序。这里的最佳做法是使用setOnSucceeded
来管理线程。
例如:
ExecutorService