Ошибки при распространении Java-приложений для MacOS с помощью ProcessBuilder и jspawnhelperJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибки при распространении Java-приложений для MacOS с помощью ProcessBuilder и jspawnhelper

Сообщение Anonymous »

У меня есть Java-приложение, которое я распространяю с помощью jpackage для MacOS.
Среда выполнения поставляется вместе с приложением, это JDK версии 22.
Когда приложение пытается выполнить внешнюю команду с помощью ProcessBuilder, я получаю следующую ошибку:

Код: Выделить всё

java.io.IOException: Cannot run program "ls": error=0, Failed to exec spawn helper: pid: 16512, signal: 11
Я читал, что это может быть проблемой с разрешениями на выполнение «jspawnhelper» при установке приложения.
Однако, когда я проверяю разрешения этого файла, они :

Код: Выделить всё

-rwxr-xr-x   1 root  wheel     71664 Jul 25 14:06 jspawnhelper
Я даже могу выполнить его вручную из командной строки без проблем с разрешениями.
Я знаю, что в некоторых случаях эту проблему можно пропустить, проверив путь Java выполняет внешнюю команду, устанавливая параметр:

Код: Выделить всё

-Djdk.lang.Process.launchMechanism=vfork
Однако этот метод не разрешен в MacOS, согласно сообщению, которое я получаю, когда пытаюсь его использовать:

Код: Выделить всё

Exception in thread "main" java.lang.Error: vfork is not a supported process launch mechanism on this platform: MACOS
Знаете ли вы, почему «jspawnhelper» завершает работу с сигналом 11 в этом случае?
Есть ли какие-нибудь советы о том, как глубже разобраться в причине сбоя «jspawnhelper»?< /p>
Судя по комментариям, вот фрагмент кода. Как видите, это очень просто (я реализовал это, чтобы проверить, работает это или нет):

Код: Выделить всё

public static boolean testExecProcess() {
try {
ProcessBuilder builder = new ProcessBuilder("ls");
log.info("Test execution of external command [" + command + "]...");
builder.start();
} catch (IOException exc) {
log.info("Got an exception trying to execute the command: " + exc.getMessage());
return false;
}
return true;
}
Когда я выполняю это с помощью JRE, установленной на компьютере MAC, все работает отлично. Но при его выполнении из моего распределенного приложения, которое также включает в себя JRE, это не работает, как я объяснял ранее.

Подробнее здесь: https://stackoverflow.com/questions/787 ... r-and-jspa
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»