Как я могу определить, не найден ли файл для выполнения ProcessBuilder в Java?

1

У меня есть эта часть кода, которая должна запускать подпроцесс msg.exe в Windows:

    ProcessBuilder pb = new ProcessBuilder("msg.exe");
    try {
        proc = pb.start();
    } catch (IOException  ex) {
        jLabel4.setText("Cannot launch message box process");
        return;
    }

Теперь я попытался удалить/переименовать msg.exe и не вызвал исключений: обе строки в catch не выполняются. Как я могу определить, не найден ли файл для выполнения конструктором процесса?

Если я попытаюсь поймать FileNotFoundException, он говорит, что этот уже пойман (вероятно, как часть IOException). Если я пытаюсь поймать только FileNotFoundException, для этого требуется выхватить IOException с предупреждением.

  • 0
    Покажите нам создание pb .
  • 0
    должен был быть напечатан, покажите нам создание pb
Показать ещё 1 комментарий
Теги:
filenotfoundexception
processbuilder

3 ответа

1
Лучший ответ

Мой выстрел в темноте:

У вас есть исполняемый файл с именем msg.exe в каталоге вашего Java-приложения, которое вы пытаетесь выполнить из вашего Java-кода. При переименовании или удалении файла вы ожидаете new ProcessBuilder("msg.exe").start() IOException.

Этого не произойдет, поскольку, если в каталоге нет файла с именем msg.exe, он будет искать его в вашем %PATH% и, наконец, найти его в C:\Windows\System32\, что, вероятно, не намеревался.

Эта дилемма может быть решена путем явного указания, что файл, который вы пытаетесь выполнить, должен существовать в текущем каталоге: new ProcessBuilder("./msg.exe")

0

Метод start() может быть вызван повторно из одного экземпляра для создания новых подпроцессов с одинаковыми или связанными атрибутами. Каждый процесс-построитель управляет этими атрибутами процесса

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 -Exception, после того, как он удалил код

Вы пытались выполнить основной класс и снова проверить?

0

Ваш код не будет 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню