Что мне установить в качестве рабочего каталога пакета приложений MacOS, запускаемого из моего приложения Java?

Я провел некоторый поиск как на этом сайте, так и в Google, но не смог найти никакой информации. У меня есть приложение Java, которое запускает файлы .app в Mac OS. Теперь я понимаю, что расширение .app на самом деле является не исполняемым файлом, а скорее пакетом приложений, который содержит исполняемый файл в подкаталоге «/Contents/MacOS/».

В моем примере я буду использовать приложение "/Applications/Chess.app". Таким образом, в этом случае фактический исполняемый файл находится в «/Applications/Chess.app/Contents/MacOS/».

Это просто вопрос установки рабочего каталога «/Applications/Chess.app/Contents/MacOS/»?


person drumhead    schedule 04.04.2012    source источник
comment
Вы пробовали Desktop.getDesktop().open("/Applications/Chess.app")   -  person a_horse_with_no_name    schedule 04.04.2012
comment
Да, это то, что у меня сейчас есть в моем коде, и оно отлично работает. Однако я подумал, что могут быть приложения, которые я запускаю, которым может потребоваться указать правильный рабочий каталог. Например, мое Java-приложение также запускает файлы .exe в Windows, а некоторые приложения Windows работают только в том случае, если в качестве рабочего каталога задано расположение файла .exe. Поэтому я подумал, что с MacOS я могу столкнуться с той же проблемой.   -  person drumhead    schedule 04.04.2012


Ответы (2)


Приложения Mac обычно не могут полагаться на то, что рабочий каталог установлен на что-то конкретное. Xcode устанавливает его одним способом, запуск из Finder устанавливает его другим способом (обычно /).

Однако вам не следует запускать приложение, просто выполнив двоичный файл в Contents/MacOS. Вы должны использовать Launch Services или NSWorkspace (или, в случае неудачи, /usr/bin/open) для их запуска.

person Ken Thomases    schedule 04.04.2012
comment
По второму пункту, могу я спросить, почему? Я обнаружил, что, выполнив двоичный файл в Contents/MacOS, я могу (например, из терминала) прочитать любой вывод непосредственно в терминале. Я сочувствую, что это кажется неправильным, хотя мне любопытно узнать, каковы недостатки? - person wardw; 06.03.2017
comment
@wardw: Это нормально. ОП говорил о том, чтобы одно приложение запускало другое таким образом ради пользователя. Приложение не должно этого делать; он должен использовать службы запуска. Например, пользователи обычно не ожидают, что будет запущено несколько экземпляров приложения. Службы запуска избегают этого (вместо этого активируя уже запущенный экземпляр), в то время как это легко сделать случайно, если вы запустите исполняемый файл напрямую. - person Ken Thomases; 06.03.2017

Я использую "$APP_PACKAGE/Contents/..." [значение] в "WorkingDirectory" [ключ], установленный в строковом режиме в [словарь] "Java". Надеюсь это поможет.

Я пытаюсь изменить местоположение пользователем, поэтому я был там, единственная проблема заключается в том, что размер вашего приложения будет увеличиваться в геометрической прогрессии, но никогда не уменьшится, даже если вы удалите все содержимое, поэтому я пытаюсь работать над этим скажи мне, как это происходит. Удачи вам.

person Brandon Roehl    schedule 07.08.2013