0

我正在编写一个程序,它将脚本的使用转换为带有按钮的 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内部有没有更实用的方法?

4

2 回答 2

0

您可能需要询问您是否真的需要动态调用类的松散耦合。由于 jar 在您的类路径中,因此您可以像通常对任何类一样在代码中创建该类的实例。这当然需要 jar 进行编译步骤,但这是正常的。

如果您决定确实需要动态调用,那么您应该使用 InitialContext http://docs.oracle.com/javase/7/docs/api/javax/naming/InitialContext.html通过 JNDI 进行调用

其他 JNDI 参考:http ://docs.oracle.com/javase/tutorial/jndi/

于 2013-09-17T14:07:30.117 回答
0

如果您不需要将值传递给打开程序,您可以使用该Desktop对象,例如:

Desktop.getDesktop().open(new File("/Desktop/jarfile.jar"));

我发现很多次有用的简单易行的方法。希望能帮助到你。

编辑:-您可以使用检查您的桌面是否也受支持

if(Desktop.isDesktopSupported()){ 
//open
}
于 2013-09-17T14:01:42.227 回答