从javafx app启动python脚本

时间:2018-05-28 15:57:37

标签: java python javafx

我想从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停止响应......

我不知道如何解决这个问题...... 提前感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

只需在后台线程中运行脚本,并确保使用Platform.runLater(...)或通过将命令封装为Task并使用{{}来更新FX应用程序线程上的GUI。 1}}处理程序。这里的最佳做法是使用setOnSucceeded来管理线程。

例如:

ExecutorService