两个提示:
System.getProperty("java.home") + "/bin/java"
为你提供了Java可执行文件的路径。
((urlclassloader) Thread.currentThread().getContextClassLoader()).getURL()
帮助你重构当前应用程序的类路径。
然后你EXECUTE.application
就是(伪代码):
Process.exec(javaExecutable, "-classpath", urls.join(":"), CLASS_TO_BE_EXECUTED)
这是已提供的其他一些答案的综合。Java系统属性提供了足够的信息,以我认为是平台独立的方式提供了java命令的路径和类路径。
public final class JavaProcess {
private JavaProcess() {}
public static int exec(Class klass, List<String> args) throws IOException,
InterruptedException {
String javaHome = System.getProperty("java.home");
String javaBin = javaHome +
File.separator + "bin" +
File.separator + "java";
String classpath = System.getProperty("java.class.path");
String className = klass.getName();
List<String> command = new LinkedList<String>();
command.add(javaBin);
command.add("-cp");
command.add(classpath);
command.add(className);
if (args != null) {
command.addAll(args);
}
ProcessBuilder builder = new ProcessBuilder(command);
Process process = builder.inheritIO().start();
process.waitFor();
return process.exitValue();
}
}
你将像这样运行此方法:
int status = JavaProcess.exec(MyClass.class, args);
我认为传入实际的类而不是名称的String表示形式是有意义的,因为无论如何该类都必须位于类路径中。