您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在单独的过程中执行Java应用程序

在单独的过程中执行Java应用程序

两个提示

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表示形式是有意义的,因为无论如何该类都必须位于类路径中。

java 2022/1/1 18:15:32 有434人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶