0

我有一个可执行的 Jar 文件,为了简单起见,我想制作它,以便您只需在桌面上双击它即可运行。我试过这个:

if(args.length == 0){
        String path = Main.class.getProtectionDomain().getCodeSource().getLocation().getPath();
        String decodedPath = URLDecoder.decode(path, "UTF-8");
        Runtime rt = Runtime.getRuntime();
        Process pr = rt.exec("java -jar \"" + decodedPath + "\" -arg");
        System.out.println("java -jar \"" + decodedPath + "\" -arg");
    }

无济于事。我假设如果我告诉程序检查“-arg”参数并且它不存在,那么它将假定程序是从可执行文件运行的,而不是从命令行调用的。那么有没有办法让程序打开命令提示符,然后在其中运行自己,杀死以前的程序?

4

3 回答 3

1

至于“双击运行”,这取决于操作系统。

您可以使用以下命令在命令行“运行 jar”:

java -jar the.jar

这要求 jar 有一个META-INF/MANIFEST.MF并且这个清单文件有一个Main-Class条目,参数是你的main()方法所在的类。例如:

Main-Class: org.foobar.mypackage.Foo
于 2013-06-01T10:28:51.877 回答
0

我为类似的问题所做的是,我在 JAR 文件中制作了一个单独的 GUI 程序,其中一些JTextFields 用于输入和一个JButton用于确认。单击该按钮时,它会使用String数组中的这些值调用我的其他类中的 main 方法,以启动该程序并使用frame.setVisible(false). 我建议做类似的事情,但这取决于您正在开发的程序类型。

于 2013-06-14T22:28:04.473 回答
0

您也可以在运行时将必要的命令行标志直接传递给 JRE !几周前我才发现这一点,但是您可以访问java.library.path并通过反射将其更改为匹配必要的库路径,只需将此代码放在您的 main 方法的前面。

try{
    System.setProperty("java.library.path", path);
    Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
    fieldSysPath.setAccessible( true );
    fieldSysPath.set( null, null );
}catch(Exception ex){
    // just exit and tell user that there was an error or something similar
}

无论如何,我希望这会有所帮助。你也可以通过类似的代码做很多类似的事情。

于 2013-07-03T17:35:12.213 回答