2010-01-27 60 views
3

我有正在執行shell腳本的Mac應用程序包。 shell腳本調用java程序1來做一些事情,然後啓動主要的Java應用程序。此過程在Dock中爲shell腳本留下一個圖標,該腳本顯示應用程序文件夾中的名稱以及Dock程序中的一個圖標。運行Java程序的Mac shell腳本把兩個圖標在碼頭

有什麼辦法,以防止在Dock中顯示的shell腳本的應用程序圖標?

回答

6

是,假設第一個Java程序可以運行headless

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

附錄:如果您正在使用JavaApplicationStub,如下可以得到從發射過程診斷輸出:

 
$ export JAVA_LAUNCHER_VERBOSE 
$ ./YourBundle.app/Contents/MacOS/JavaApplicationStub 
+0

我不認爲這是在文檔第一個Java程序的圖標。我認爲當java程序完成時就會消失。這就像是有一個shell腳本的圖標和一個正在運行的java程序的圖標。我想擺脫shell腳本圖標。 – GregA100k 2010-01-28 03:59:27

+0

令人費解。如果JVM執行任何會拋出「HeadlessException」的事情,那麼您會看到它的停靠圖標。第二個過程是第一個孩子嗎?你使用'JavaApplicationStub'還是隻使用你的腳本? – trashgod 2010-01-28 21:59:16

+0

未使用JavaApplicationStub。 shell腳本就是執行的內容。每個Java程序是由調用Java單獨調用... – GregA100k 2010-02-01 21:19:09

0

也許你可以在後臺運行Java程序,然後退出shell腳本?事情是這樣的:

#!/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)調用或類似的東西運行shell腳本,沒有GUI交互。

+0

這聽起來像是正是我需要的,但出口0線但直到第二java程序結束後達成。 – GregA100k 2010-02-01 21:16:10

1

如果你不想在Dock中的shell腳本的圖標,你需要開始,至少第二java進程的主要應用,在exec模式:

exec java -jar XXX

exec手段,它將用新進程「替換」當前運行的shell。這接縫正是你想要的。

universalJavaApplicationStub爲Java 6/7是做同樣的方式,它工作得很好:)