Ответ 1
Существует только один способ создания процессов в Java, Runtime.exec()
- в основном это позволяет вам запускать новую JVM так же, как и вы через интерфейс командной строки.
Я хотел бы создать процесс в своем приложении. Но после осмотра и использования Java API я все еще не совсем понял.
В основном я хочу создать многопроцессное приложение. Но новый процесс - это класс в моем приложении.
Я знаю, что некоторые из вас могут спросить, почему бы не создать поток? Поскольку класс вызывает код matlab, проблема и класс Java Здесь
Есть ли какой-либо пример кода или учебник, который любой из вас может порекомендовать? Спасибо.
Существует только один способ создания процессов в Java, Runtime.exec()
- в основном это позволяет вам запускать новую JVM так же, как и вы через интерфейс командной строки.
Может быть java.lang.Process может помочь здесь.
Методы
ProcessBuilder.start()
иRuntime.exec
создают собственный процесс и возвращают экземпляр подкласса Process, который может использоваться для управления процессом и получения информации об этом. Класс Process предоставляет методы для выполнения ввода из процесса, выполнения вывода в процесс, ожидания завершения процесса, проверки состояния выхода процесса и уничтожения (уничтожения) процесса.
Если вы хотите более мелкозернистый элемент управления, вы можете использовать ProcessBuilder
- этот класс позволяет устанавливать переменные среды и настраивать проект трубы (stdout
, in
, err
).
Как только вы его настроили, вы можете вызывать ProcessBuilder#start()
столько раз, сколько хотите, чтобы создавать новые процессы (он возвращает экземпляр Process
). Вы можете изменить конфигурацию для новых процессов между этими вызовами на start()
.
Я думаю, вы знаете, как создать новый процесс. Если нет, см. здесь или здесь.
Теперь вам нужно запустить java.exe
с помощью текущего пути к классам. Этот путь класса можно найти в свойстве System java.class.path
. Чтобы найти java.exe
, просмотрите new File( System.getProperty("java.home"), "bin")
.
Если у вас есть проблемы с этим подходом, я предлагаю написать оболочку script и называть ее достаточным количеством аргументов, поэтому код в main()
может решить, какой именно класс запускать.
Моя рекомендация - взглянуть на zt-exec: https://github.com/zeroturnaround/zt-exec
Он завернул java.lang.ProcessBuilder и Apache Commons Exec и мог легко управлять жизненным циклом процесса.