[英]Launch JVM process from a Java application use Runtime.exec?
我希望能夠從現有的Java應用程序啟動Java服務器進程並監視stdoutput和stderror並將該輸出重定向到文件。 是使用'Runtime.exec'的最佳方法,並像對待任何其他操作系統進程一樣處理應用程序,或者是否有更適合新JVM的方法。
這是在Java 1.5上
您應該使用ProcessBuilder
而不是Runtime
,但我不知道在您的情況下是否更適合其他東西(特別是運行Java進程)。
我知道我在這個帖子中已經遲到了,但是如果有人需要它,根據我的經驗,使用ANT來啟動Java應用程序會更容易。 這具有獨立於平台的優點。 以下是一個示例類:
package com.trilliantnetworks.scheduler.quartz.test;
import java.io.File;
import java.io.PrintStream;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.DemuxOutputStream;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Echo;
import org.apache.tools.ant.taskdefs.Java;
import org.apache.tools.ant.types.Path;
public class MyLaunchTest {
public static void main(String[] args) {
Project project = new Project();
project.setBaseDir(new File(System.getProperty("user.dir")));
project.init();
DefaultLogger logger = new DefaultLogger();
project.addBuildListener(logger);
logger.setOutputPrintStream(System.out);
logger.setErrorPrintStream(System.err);
logger.setMessageOutputLevel(Project.MSG_INFO);
System.setOut(new PrintStream(new DemuxOutputStream(project, false)));
System.setErr(new PrintStream(new DemuxOutputStream(project, true)));
project.fireBuildStarted();
System.out.println("running");
Throwable caught = null;
try {
Echo echo = new Echo();
echo.setTaskName("Echo");
echo.setProject(project);
echo.init();
echo.setMessage("Launching Some Class");
echo.execute();
Java javaTask = new Java();
javaTask.setTaskName("runjava");
javaTask.setProject(project);
javaTask.setFork(true);
javaTask.setFailonerror(true);
javaTask.setClassname(MyClassToLaunch.class.getName());
Path path = new Path(project, new File(System.getProperty("user.dir") + "/classes").getAbsolutePath());
javaTask.setClasspath(path);
javaTask.init();
int ret = javaTask.executeJava();
System.out.println("java task return code: " + ret);
} catch (BuildException e) {
caught = e;
}
project.log("finished");
project.fireBuildFinished(caught);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.