Как запустить исполняемый файл С++ из Java?

Я хочу открыть EXE-файл из программы Java. Я попробовал 2 процедуры. Программа может запускать некоторые программы, такие как NotePad++, но не может запускать мой EXE-файл C++. Я пытался:

  1. Process exec = Runtime.getRuntime().exec(file.getAbsolutePath());

  2. ProcessBuilder processBuilder = new ProcessBuilder(file.getAbsolutePath());

но ни один из вышеперечисленных не работает. Никаких исключений не выдается, и exec.isAlive = true.

Если значение isAlive равно true, то приложение было запущено (проверьте с помощью диспетчера задач). Если ваша программа на C++ работает неправильно, проблема должна быть связана с вашим приложением C++, а не с приложением Java. Отладьте свое приложение C++.

Remy Lebeau 02.02.2019 04:28

Убедитесь, что вы читаете потоки ввода/ошибки процессов и проверяете значение выхода (вы можете вызвать waitFor для процесса, чтобы дождаться его завершения)

MadProgrammer 02.02.2019 05:32

В случае ProcessBuilder вы должны вызвать на нем start(). Как сказал MadProgrammer, вы должны обязательно обрабатывать каналы для подпроцесса, чтобы предотвратить его блокировку. Или перенаправьте их на использование stdio вашего процесса: new ProcessBuilder(file.getAbsolutePath()).inheritIO().start();

Holger 17.09.2019 16:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
3
296
1

Ответы 1

Ваша ошибка в том, что вы выбрали абсолютный путь в первой процедуре. Попробуйте использовать относительный путь, я только что проверил, и он работает нормально.

Это также работает для меня (используя 2 обратных слэша). Runtime.getRuntime().exec("C:\\Program Files\\DDNet\\DDNet.exe");

С уважением

Это неправда, это вообще не важно, я сказал, что исключение не выбрасывается.

MoRtEzA TM 02.02.2019 17:54

Другие вопросы по теме