java - jar执行后指定Java命令行选项

标签 java command-line

为了使我的应用程序对 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/

相关文章:

java - 将样式文本写入 .docx 文件

java - 尝试将数据从一个 Action 发送到 playframework 中的另一个 Action 时出现 303 See other

java - 在 web.xml 中存储变量的目的?

java - Java 中 goto 语句的替代方案

perl - 在 Perl 脚本中同时使用 ARGV 和 CGI

command-line - Installshield命令行IsCmdBld.exe不修改产品版本

java - 为什么我可以匿名子类化枚举而不是最终类?

maven - ged 从 maven 命令行将测试用例作为参数传递

python - 解析 GTF 基因文件

Linux 命令行更改 Windows 可执行程序集信息