我正在编写一个程序,将脚本的使用转换为带有按钮的GUI来构建一些东西。脚本所做的一件事就是加载一个jar文件,并在附带参数的jar中运行一个特定的类。在脚本中它的执行方式如下:
java -classpath“/ path / to / some / classes /”com.company.app.App -i -e
类路径中的其他类是正在执行的类文件所在的位置。这对于应用程序的每个用户都是不同的。
我想到的方法是构建一个Process然后使用ProcessBuilder类执行它,例如:
List<String> command = Arrays.asList("java", "-classpath", "/path/to/some/classes/", "com.company.app.App", "-i", "-e");
ProcessBuilder pb = new ProcessBuilder(command);
Process p = pb.start();
在java内部是否有更实用的方法?
答案 0 :(得分:0)
如果您不需要将值传递给开始程序,则可以使用Desktop
对象,例如:
Desktop.getDesktop().open(new File("/Desktop/jarfile.jar"));
简单易行的方式,我发现有用很多次。希望它有所帮助。
编辑: - 您可以使用
检查您的桌面是否也受支持if(Desktop.isDesktopSupported()){
//open
}
答案 1 :(得分:0)
您可能需要询问您是否真的需要动态调用类的松散耦合。由于jar位于类路径中,因此您可以像在通常任何类中一样在代码中创建类的实例。这当然需要jar用于编译步骤,但这是正常的。
如果您确定确实需要动态调用,那么您应该使用InitialContext http://docs.oracle.com/javase/7/docs/api/javax/naming/InitialContext.html
通过JNDI进行调用