处理IllegalThreadStateException

时间:2014-09-22 16:58:57

标签: java

import java.io.*;
class Sysexecute
{
    public static void main(String args[]) throws IOException,InterruptedException,IllegalThreadStateException
    {
        Runtime rt= Runtime.getRuntime();
        Process p=rt.exec("ls");
        System.out.println(p.exitValue());
    }
}

我正在学习如何在java中执行系统命令,并且发生了此错误。我尝试使用抛出来否定它但没有用。请解释原因和解决方案

actual error:-
Exception in thread "main" java.lang.IllegalThreadStateException: process hasn't exited
    at java.lang.UNIXProcess.exitValue(UNIXProcess.java:270)
    at Sysexecute.main(Sysexecute.java:8)

2 个答案:

答案 0 :(得分:15)

在尝试获取退出值之前调用Process#waitFor()。这将阻止当前线程,直到生成的进程终止。如果你不这样做,Process#exitValue()会抛出

  

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

答案 1 :(得分:2)

始终使用waitFor(long timeout,TimeUnit unit)而不是waitFor(),以便不会无限期阻塞线程。