为了使我的应用程序对 OSX 更加友好,我尝试将程序的停靠名称设置为 MyApp
之类的名称,而不是完全限定的类名称(默认值),例如myproject.mypackage.mysubpackage.myclass
。显然,第一个更具吸引力。
为此,我在执行 .jar 文件时使用 OSX -Xdock:name
命令作为命令行选项。因此,要执行它,命令可能类似于 java -Xdock:name=MyApp -jar/mypath/myjar.jar
。这非常有效,并将 .jar 的停靠名称设置为 MyApp
。但问题是这个 .jar 永远不会通过命令行执行,而是一个带有 GUI 显示的双击可运行的 .jar。
我想到以编程方式设置此命令行选项的唯一方法是让第二个类执行实际启动程序的类。所以像这样:
public class AppStarter {
public static void main(String[] args) {
String cmd = "java -Xdock:name=MyApp -cp myproject/mypackage/AppBuilder";
try {
Runtime runtime = Runtime.getRuntime();
runtime.exec(cmd);
} catch(IOException ex) {
//Display error message
}
}
}
public class AppBuilder {
public static void main(String[] args) {
//Start actual program and build GUI display
}
}
因此,在这里,AppStarter
设置了 AppBuilder
的命令行选项,该选项在执行时具有扩展坞名称 MyApp
。我看到的问题是它的耦合非常紧密。如果由于某种原因设备上的命令行无法访问或者不断抛出一些 IOException,那么程序实际上不会发生任何事情,并且它会死掉。普通计算机用户无法从中恢复。
所以我想知道是否可以在 .jar 已经开始执行后设置这些命令行选项。以编程方式设置应用程序名称的旧方法对于多个 OSX 更新来说已经无效,因此我只能使用这个命令行选项。感谢您的任何建议。
最佳答案
执行java
命令后,将为正在运行的JVM解析和设置命令行参数。您无法再更改它。
这通常由执行脚本(bash 等)处理。如果您不能使用它们,您可以使用您的方法,但最大的缺点是它将在单独的进程中运行。
关于java - jar执行后指定Java命令行选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31758427/