此方法使用ProcessBuilder通过我的Java应用程序运行外部C程序。 我已将其设置为等待1000毫秒。 我传递了一个进入无限循环的代码。 但是这个过程永远不会抛出interruptException。
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);
}
我还注意到该方法返回控件但该进程在后台继续运行。 为什么会这样?
答案 0 :(得分:3)
返回: 如果子进程已退出,则返回true;如果在退出子进程之前等待时间已过,则返回 false
因此,您应该检查InterruptedException
的返回值。
答案 1 :(得分:1)
方法返回控件但进程仍在后台运行 - 因为您已指定超时限制,到那时,您的C程序尚未完成。你自己说它是一个无限循环。
我传递了一个进入无限循环的代码。但是这个过程永远不会抛出interruptException。
WAITFOR()
文档说明
抛出: InterruptedException - 如果当前线程在等待时被另一个线程中断,则等待结束并且等待 抛出InterruptedException。
您当前的线程不会被任何其他线程中断,因此它不会抛出InterruptedException。
您的计划行为似乎并不错误。