Java ProcessBuilder 不能在线程中工作

标签 java processbuilder java-threads

我正在使用 Java ProcessBuilder 执行两个 shell 脚本。我希望两次执行之间有 10 秒的时间间隔。这就是我使用线程的原因。但以下代码不会执行 shell 脚本(没有它们执行的线程)。

public void execute() {

    new Thread(new Runnable() {
        public void run() {
            Process process_1;
            try {

                List<String> cmdList_1 = new ArrayList<String>();

                cmdList_1.add("sh");
                cmdList_1.add("command_1.sh");
                ProcessBuilder pb = new ProcessBuilder(cmdList_1);
                process_1 = pb.start();
                process_1.waitFor();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }).start();

    new Thread(new Runnable() {
        public void run() {
            Process process_2;
            try {
                Thread.sleep(10000);

                List<String> cmdList_2 = new ArrayList<String>();

                cmdList_2.add("sh");
                cmdList_2.add("command_2.sh");
                ProcessBuilder pb = new ProcessBuilder(cmdList_2);
                process_2 = pb.start();
                process_2.waitFor();

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }).start();
}  

如何修复我的代码?或者有没有更好的方法来实现我的抱负?

提前致谢

最佳答案

尝试使用进程的输出,如下所示:

ProcessBuilder processBuilder = new ProcessBuilder();
Process process = processBuilder.start();
BufferedReader reader = new BufferedReader((new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
    System.out.println(line);
}

关于Java ProcessBuilder 不能在线程中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57197928/

相关文章:

java - 如何从 future 对象中查看执行了哪个线程(名称)

java - ProcessBuilder 在 Mac OS 中找不到 python3

java - 从 java 代码运行 .JAR 文件 (netbeans)

java - 了解Java线程干扰

java - 处理多个休息调用的线程

java - 如何在java中使用jsoup用字符替换html标签

java - 从路径加载时如何将所有行转换为小写?

java - 如何使 JavaFX 2.0 中的类成为可用的节点?

java - 如何测试基于 jline 的控制台应用程序

java - 每个线程都有一个堆栈空间吗?