如何从另一个Java应用程序运行java应用程序并在主程序返回后继续运行?

Mic*_*zyk 5 java exec apacheds

我正在尝试从我的java应用程序运行ApacheDS实例.
我使用run()ScriptWrapper类的这种方法来执行ApacheDS附带的脚本来运行它:

public class ScriptWrapper implements Serializable {
    private String scriptPath;

    protected Process run(List<String> params) throws IOException {
        LOGGER.debug("Executing script="+scriptPath);
        params.add(0, scriptPath);

        if(workDir != null) {
            return Runtime.getRuntime().exec(params.toArray(new String[params.size()]), envp.toArray(new String[envp.size()]), new File(workDir));
        } else {
            return Runtime.getRuntime().exec(params.toArray(new String[params.size()]));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但问题是,当这个应用程序运行的tomcat被终止和/或ScriptWrapper被垃圾收集时,ApacheDS的实例也会终止.如何保持活力?

编辑:谢谢你的回答.我已经决定以不同的方式解决这个问题,并通过使用二进制ApacheDS安装的脚本进行守护程序.

Pab*_*ano 0

您的主进程应该在结束之前等待它的子进程。

Process 对象有一个方法waitFor()。您可以创建一个新线程,然后运行并等待任何其他进程。