Сценарий оболочки Mac, запускающий java-программу, помещает два значка в док-станцию

У меня есть пакет приложений Mac, который выполняет сценарий оболочки. Сценарий оболочки вызывает java-программу 1 для выполнения некоторых действий, а затем запускает основное java-приложение. Этот процесс оставляет один значок в доке для сценария оболочки, который показывает имя из папки приложения, и один значок в доке для программы Java.

Есть ли способ предотвратить отображение значка приложения сценария оболочки в Dock?


person GregA100k    schedule 27.01.2010    source источник


Ответы (3)


Да, при условии, что первая программа на Java может работать без головы:

java -Djava.awt.headless=true ...

Приложение: Если вы используете JavaApplicationStub, диагностический вывод из процесса запуска может быть получен следующим образом:

$ export JAVA_LAUNCHER_VERBOSE
$ ./YourBundle.app/Contents/MacOS/JavaApplicationStub
person trashgod    schedule 28.01.2010
comment
Я не думаю, что это первая иконка Java-программы в документе. Я думаю, что один уходит, когда программа Java завершается. Это похоже на то, что есть значок для сценария оболочки и один для запущенной java-программы. Я хочу избавиться от значка сценария оболочки. - person GregA100k; 28.01.2010
comment
Загадочный. Если JVM сделает что-нибудь, что вызовет HeadlessException, вы увидите значок дока для этого. Является ли второй процесс потомком первого? Вы используете JavaApplicationStub или только свой сценарий? - person trashgod; 29.01.2010
comment
JavaApplicationStub не используется. Сценарий оболочки - это то, что выполняется. Каждая java-программа вызывается отдельно, вызывая java... - person GregA100k; 02.02.2010

Если вы не хотите, чтобы значок шелл-скрипта был в доке, вам нужно запустить хотя бы второй java-процесс для основного приложения в режиме exec:

exec java -jar XXX

exec означает, что он «заменит» вашу текущую оболочку новым процессом. Это швы именно то, что вы хотите.

Мой universalJavaApplicationStub для Java 6/7 делает то же самое и работает просто отлично :)

person ToFi    schedule 21.03.2014

Может быть, вы можете запустить программу Java в фоновом режиме, а затем выйти из сценария оболочки? Что-то вроде этого:

#!/bin/sh
first_java_program            # Synchronous, wait for it
nohup second_java_program &   # Run in the background, detach from terminal
exit 0                        # Indicate clean exit

Другим вариантом может быть запуск сценария оболочки без Terminal.app, но непосредственно с системным вызовом уровня Unix (3) или чем-то подобным, без взаимодействия с графическим интерфейсом.

person haa    schedule 29.01.2010
comment
Это звучало как именно то, что мне было нужно, но строка выхода 0 не была достигнута до тех пор, пока не закончилась вторая программа Java. - person GregA100k; 02.02.2010