运行java程序的MacShell脚本在dock中放置两个图标
我有一个Mac应用程序包,它正在执行一个shell脚本。shell脚本调用java程序1来完成一些工作,然后启动主java应用程序。这个过程在Dock中为shell脚本留下一个图标,显示应用程序文件夹中的名称,在Dock中为java程序留下一个图标运行java程序的MacShell脚本在dock中放置两个图标,java,macos,icons,dock,Java,Macos,Icons,Dock,我有一个Mac应用程序包,它正在执行一个shell脚本。shell脚本调用java程序1来完成一些工作,然后启动主java应用程序。这个过程在Dock中为shell脚本留下一个图标,显示应用程序文件夹中的名称,在Dock中为java程序留下一个图标 有没有办法阻止shell脚本应用程序图标显示在Dock中?有,假设第一个Java程序可以运行: java-Djava.awt.headless=true… 附录:如果您使用的是JavaApplicationStub,则可以通过以下方式获得启动过程的诊
有没有办法阻止shell脚本应用程序图标显示在Dock中?有,假设第一个Java程序可以运行:
java-Djava.awt.headless=true…
附录:如果您使用的是JavaApplicationStub
,则可以通过以下方式获得启动过程的诊断输出:
$ export JAVA_LAUNCHER_VERBOSE
$ ./YourBundle.app/Contents/MacOS/JavaApplicationStub
$export JAVA_LAUNCHER_VERBOSE
$./YourBundle.app/Contents/MacOS/JavaApplicationStub
也许您可以在后台运行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的情况下运行shell脚本,但直接使用Unix级别的系统(3)调用或类似的调用,而不使用GUI交互。如果您不想让shell脚本图标出现在dock中,则需要在
exec
模式下启动主应用程序的至少第二个java进程:
execjava-jarxxx
exec
意味着,它将用新进程“替换”当前运行的shell。这正是你想要的
我的Java 6/7版也是这样做的,它工作得很好:)我不认为它是文档中第一个Java程序的图标。我认为,当java程序完成时,它就消失了。这就像有一个用于shell脚本的图标和一个用于正在运行的java程序的图标一样。我想去掉shell脚本图标。令人费解。如果JVM执行任何会抛出
HeadlessException
的操作,您将看到它的停靠图标。第二个过程是第一个过程的子过程吗?您使用的是JavaApplicationStub
还是您的脚本?不使用JavaApplicationStub。shell脚本就是要执行的脚本。每个java程序都是通过调用java来分别调用的……这听起来正是我所需要的,但是直到第二个java程序结束后才到达出口0行。