为了使我的应用程序更适合OSX,我试图将我的程序的停靠名称设置为MyApp
而不是完全限定的类名(默认值),例如{{1 }}。显然,第一个更具吸引力。
为此,我在执行.jar文件时使用OSX myproject.mypackage.mysubpackage.myclass
命令作为命令行选项。因此,要执行它,该命令可能看起来像-Xdock:name
。这非常有效,并将.jar的停靠栏名称设置为java -Xdock:name=MyApp -jar /mypath/myjar.jar
。但问题是这个.jar永远不会通过命令行执行,而且是一个带有GUI显示的双击runnable .jar。
我想到以编程方式设置此命令行选项的唯一方法是让第二个类执行实际启动程序的类。所以像这样:
MyApp
所以在这里,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
。我看到的问题是它非常紧密耦合。如果由于某种原因,设备上的命令行无法访问或某些IOException不断被抛出,那么程序就不会发生任何事情,它将会死亡。普通计算机用户无法从中恢复。
所以我想知道是否有可能在.jar已经开始执行之后设置这些命令行选项。以编程方式设置应用程序名称的旧方法对于多个OSX更新无效,因此我只能使用此命令行选项。谢谢你的任何建议。
答案 0 :(得分:1)
执行java
命令后,将为正在运行的JVM解析和设置命令行参数。你不能再改变它了。
这通常由执行脚本(bash等)处理。如果你不能使用它们,你可以使用你的方法,但最大的缺点是它将在一个单独的过程中运行。