处理IllegalThreadStateException异常情况

19
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中执行系统命令,但是出现了这个错误。我尝试使用throws来解决它,但没有用。请解释原因并提供解决方案。
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个回答

31
在尝试获取退出值之前,请调用Process#waitFor()。这将阻塞当前线程,直到生成的进程终止。 如果不这样做,Process#exitValue()会抛出IllegalThreadStateException异常 - 如果此 Process对象表示的子进程尚未终止。

7

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接