filenotfoundexception如何检测ProcessBuilder在Java中是否未找到要执行的文件?
我有这部分代码,应该是msg。Windows上的exe子进程:
ProcessBuilder pb = new ProcessBuilder("msg.exe");
try {
proc = pb.start();
} catch (IOException ex) {
jLabel4.setText("Cannot launch message box process");
return;
}
现在我尝试删除/重命名msg。exe且未引发异常:未执行catch子句中的两行。 如何检测process builder是否未找到要执行的文件
如果我试图捕获FileNotFoundException,它会说这个已经被捕获(可能是IOException的一部分)。如果我试图只捕获FileNotFoundException,则需要捕获带有警告的IOException
# 1 楼答案
我在黑暗中的镜头:
在Java应用程序的目录中有一个名为“msg.exe”的可执行文件,您正试图从Java代码中执行该文件。重命名或删除文件时,您希望
new ProcessBuilder("msg.exe").start()
抛出一个IOException
这不会发生,因为如果目录中没有名为“msg.exe”的文件,那么它将在} 中找到它,这可能是您不打算的
%PATH%
中搜索它,最后在^{这个难题可以通过明确声明您试图执行的文件必须存在于当前目录中来解决:
new ProcessBuilder("./msg.exe")
# 2 楼答案
您的代码不会抛出
FileNotFoundException
,它将抛出IOException
见Documentation
下面是我得到的异常,因为我在linux上,所以不需要将
msg.exe
的名称更改为其他名称来生成异常# 3 楼答案
可以从同一实例重复调用start()方法,以创建具有相同或相关属性的新子流程。每个process builder都管理这些流程属性
执行上述类:无错误
重命名msg。exe到msfg。exe-捕获异常,删除代码后相同
您是否尝试在主类中执行并再次检查