从命令提示符运行Java应用程序?

时间:2013-06-01 09:32:05

标签: java cmd

我有一个可执行的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”参数并且它不存在,那么它会假设程序是从可执行文件运行的,而不是从命令行调用。那么有没有办法让程序打开一个命令提示符,然后在其中运行自己,杀死以前的程序?

3 个答案:

答案 0 :(得分:1)

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

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

java -jar the.jar

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

Main-Class: org.foobar.mypackage.Foo

答案 1 :(得分:0)

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

答案 2 :(得分: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
}

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