如何在Java中检测ProcessBuilder是否未找到要执行的文件?

如何在Java中检测ProcessBuilder是否未找到要执行的文件?,java,filenotfoundexception,processbuilder,Java,Filenotfoundexception,Processbuilder,我有这部分代码,应该在Windows上启动msg.exe子进程: ProcessBuilder pb = new ProcessBuilder("msg.exe"); try { proc = pb.start(); } catch (IOException ex) { jLabel4.setText("Cannot launch message box process"); return; } 现在我尝试删除/

我有这部分代码,应该在Windows上启动msg.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。

可以从同一实例重复调用start()方法,以创建具有相同或相关属性的新子流程。每个process builder都管理这些流程属性

public static void main(String[] args) {     
       ProcessBuilder pb = new ProcessBuilder("msg.exe");
     //  pb.directory(new File("c:\\xyzwsdemo"));
        try {
             Process   proc = pb.start();
        } catch (IOException  ex) {
            System.out.println("Cannot launch message box process");
            return;
        }
}
执行上述类:无错误

public static void main(String[] args) {


       ProcessBuilder pb = new ProcessBuilder("msfg.exe");
     //  pb.directory(new File("c:\\xyzwsdemo"));
        try {
             Process   proc = pb.start();
        } catch (IOException  ex) {
            System.out.println("Cannot launch message box process");
            return;
        }
}
将msg.exe重命名为msfg.exe-捕获异常,删除代码后相同


您是否尝试在主类中执行并再次检查?

您的代码不会抛出
FileNotFoundException
,它将抛出
IOException

下面是我得到的异常,因为我在linux上,所以不需要将
msg.exe的名称更改为其他名称来生成异常

java.io.IOException: Cannot run program "msg.exe": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at Neeraj.main(Neeraj.java:8)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:187)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 1 more
java.io.IOException:无法运行程序“msg.exe”:错误=2,没有这样的文件或目录
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
在Neeraj.main(Neeraj.java:8)
原因:java.io.IOException:error=2,没有这样的文件或目录
位于java.lang.UNIXProcess.forkAndExec(本机方法)
位于java.lang.UNIXProcess(UNIXProcess.java:187)
在java.lang.ProcessImpl.start(ProcessImpl.java:134)处
位于java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
... 还有一个
我在黑暗中拍摄的照片:

在Java应用程序的目录中有一个名为“msg.exe”的可执行文件,您正试图从Java代码中执行该文件。重命名或删除文件时,您希望
newprocessbuilder(“msg.exe”).start()引发
IOException

这不会发生,因为如果目录中没有名为“msg.exe”的文件,那么它将在您的
%PATH%
中搜索该文件,并最终在中找到它,这可能是您不希望看到的


可以通过明确说明您尝试执行的文件必须存在于当前目录中来解决此难题:
newprocessbuilder(“./msg.exe”)

显示
pb
的创建。应该已经打印出来;向我们展示PBS的创建。你说的是
C:\Windows\System32\msg.exe
?您是如何重命名或删除它的?或者你说的是另一个名为“msg.exe”的可执行文件?