此方法使用ProcessBuilder通过我的Java应用程序运行外部C程序。我已将其设置为等待1000毫秒。我正在给它传递一个进入无限循环的代码。但该进程从不抛出interruptedException。
public void execute(String sourceFileName, long timeout,String inputFile,String outputFile,String errorFile)
throws IOException, InterruptedException
{
ProcessBuilder builder=new ProcessBuilder(sourceFileName+executableFileExtension);
Process process=builder.start();
process.waitFor(timeout,TimeUnit.MILLISECONDS);
}
我还注意到该方法返回控件,但进程仍在后台运行。为什么会发生这种情况?
来自过程文档:
退货:如果子流程已退出,则为true;如果子流程退出前经过等待时间,则为false
所以在监听InterruptedException
之前,您应该检查waitFor()
的返回值。
方法返回控件,但进程仍在后台运行-因为您已经指定了超时限制,到那时,您的C程序还没有完成。你自己说这是一个无限循环。
我正在向它传递一个进入无限循环的代码。但该进程从不抛出interruptedException
等待()
文件显示
投掷:InterruptedException-如果当前线程在等待时被另一个线程中断,则等待结束引发了InterruptedException。
您的当前线程没有被任何其他线程中断,因此它不会抛出InterruptedException。
你的程序的行为似乎没有错。