我有一个可执行的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”参数并且它不存在,那么它会假设程序是从可执行文件运行的,而不是从命令行调用。那么有没有办法让程序打开一个命令提示符,然后在其中运行自己,杀死以前的程序?
答案 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
}
无论如何,我希望这很有帮助。你也可以通过类似的代码做很多类似的事情。