我正在使用ProcessBuilder
在我的Java程序中启动一个单独的进程。这是进程:
Class klass=Program.class;
String[] output=new String[2];
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.getCanonicalName();
ProcessBuilder builder = new ProcessBuilder(
javaBin, "-cp", classpath, className);
Process process = builder.start();
process.waitFor();
Program.class如下:
public class Program {
public static void main(String[] args) {
System.out.println("Hi!");
}
我希望标准输出产生Hi!
,标准错误,例如,如果我在System.out.println("Hi!")
之后不添加分号,那么标准错误将是:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error, insert ";" to complete BlockStatements
at Program.main(Program.java:6)
那么,我该怎么做呢?理想情况下,程序将这些转换为两个字符串。
由于
答案 0 :(得分:2)
首先仔细查看Process
类,它具有inputStream
属性,该属性附加到进程stdout
。您还可以使用ProcessBuilder
将stderr
重定向到stdout
,以便更轻松地使用ProcessBuilder#redirectErrorStream(boolean)
您可以使用Process
属性写信outputStream
(尽量不要考虑太多)...
基本上,您希望通过inputStream
“读取”“输出”,并通过outputStream
像...一样的东西。
Class klass=Program.class;
String[] output=new String[2];
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.getCanonicalName();
ProcessBuilder builder = new ProcessBuilder(
javaBin, "-cp", classpath, className);
builder.redirectErrorStream(true);
Process process = builder.start();
int in = -1;
InputStream is = process.getInputStream();
try {
while ((in = is.read()) != -1) {
System.out.println((char)in);
}
} catch (IOException ex) {
ex.printStackTrace();
}
int exitCode = process.waitFor();
System.out.println("Exited with " + exitCode);
作为例子