为什么 Java.lang.Process 没有在此代码中抛出 InterruptedException?
Why is Java.lang.Process not throwing InterruptedException in this code?
此方法通过我的 Java 应用程序使用 ProcessBuilder 运行 外部 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);
}
我还注意到方法 returns 控制但进程在后台保持 运行ning。
为什么会这样?
Returns:
true if the subprocess has exited and false if the waiting time elapsed before the subprocess has exited
因此,与其监听 InterruptedException
,不如检查 waitFor()
的 return 值。
方法 returns 控件,但进程在后台保持 运行 - 因为您指定了超时限制,到那时,您的 C程序还没有完成。你自己说这是一个无限循环。
我正在向它传递一个进入无限循环的代码。但是这个过程永远不会抛出 interruptedException.
waitFor()
文档说
Throws:
InterruptedException - if the current thread is interrupted by another thread while it is waiting, then the wait is ended and an
InterruptedException is thrown.
您当前的线程未被任何其他线程中断,因此它不会抛出 InterruptedException。
您的程序的行为似乎没有错误。
此方法通过我的 Java 应用程序使用 ProcessBuilder 运行 外部 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);
}
我还注意到方法 returns 控制但进程在后台保持 运行ning。 为什么会这样?
Returns: true if the subprocess has exited and false if the waiting time elapsed before the subprocess has exited
因此,与其监听 InterruptedException
,不如检查 waitFor()
的 return 值。
方法 returns 控件,但进程在后台保持 运行 - 因为您指定了超时限制,到那时,您的 C程序还没有完成。你自己说这是一个无限循环。
我正在向它传递一个进入无限循环的代码。但是这个过程永远不会抛出 interruptedException.
waitFor()
文档说
Throws: InterruptedException - if the current thread is interrupted by another thread while it is waiting, then the wait is ended and an InterruptedException is thrown.
您当前的线程未被任何其他线程中断,因此它不会抛出 InterruptedException。
您的程序的行为似乎没有错误。