有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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


共 (3) 个答案

  1. # 1 楼答案

    我在黑暗中的镜头:

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

    这不会发生,因为如果目录中没有名为“msg.exe”的文件,那么它将在%PATH%中搜索它,最后在^{}中找到它,这可能是您不打算的

    这个难题可以通过明确声明您试图执行的文件必须存在于当前目录中来解决:new ProcessBuilder("./msg.exe")

  2. # 2 楼答案

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

    Documentation

    下面是我得到的异常,因为我在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
    
  3. # 3 楼答案

    可以从同一实例重复调用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-捕获异常,删除代码后相同

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