为啥我在 ProcessBuilder --Java 中收到 IllegalThreadStateException 错误?

Posted

技术标签:

【中文标题】为啥我在 ProcessBuilder --Java 中收到 IllegalThreadStateException 错误?【英文标题】:Why am I getting an IllegalThreadStateException error in ProcessBuilder --Java?为什么我在 ProcessBuilder --Java 中收到 IllegalThreadStateException 错误? 【发布时间】:2017-06-01 19:23:19 【问题描述】:

此代码导致带有 if 语句的行出现 IllegalThreadStateException 运行时错误:

public static void main(String args[]) throws IOException, InterruptedException 
    Runtime runtime = Runtime.getRuntime();
    Process proc = new ProcessBuilder("\"c:\\[directory]/doer.exe\"").start();
    if(proc.exitValue() == 1)
        System.out.println("Output: 1");

这个应该运行的可执行文件有退出代码 1。我做错了什么,我该如何解决?

【问题讨论】:

你想"\"c:\\[directory]\\doer.exe\"" 吗? 【参考方案1】:

Process#exitValue 的 javadoc 描述了它抛出异常的原因:

https://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#exitValue()

抛出:IllegalThreadStateException - 如果此 Process 对象表示的子进程尚未终止

在 if 语句之前使用 proc.waitFor() 等待进程完成。

【讨论】:

我遇到了与问题中描述的问题类似的问题。建议的解决方案解决了它。这应该被标记为正确答案。谢谢

以上是关于为啥我在 ProcessBuilder --Java 中收到 IllegalThreadStateException 错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥弄不到jav的力量

为啥弄不到jav的力量

GWT + ProcessBuilder

为啥 InputStreamReader 不实时读取进程的输出?

Java使用ProcessBuilder类调用外部程序

Java 沙盒和 ProcessBuilder