Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
运行java程序的MacShell脚本在dock中放置两个图标_Java_Macos_Icons_Dock - Fatal编程技术网

运行java程序的MacShell脚本在dock中放置两个图标

运行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,则可以通过以下方式获得启动过程的诊

我有一个Mac应用程序包,它正在执行一个shell脚本。shell脚本调用java程序1来完成一些工作,然后启动主java应用程序。这个过程在Dock中为shell脚本留下一个图标,显示应用程序文件夹中的名称,在Dock中为java程序留下一个图标


有没有办法阻止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行。