我怎么可以运行Linux的其他Java进程(与控制台)?
我知道我应该使用ProcessBuilder
或Runtime.getRuntime().exec()
执行命令,但我想知道我该怎么让一个单独的X-window命令终端(例如, /usr/bin/xterm
),或至少示出了控制台的终端看窗口,并用标准输入,标准输出,标准错误在运行一个Java过程。
有没有什么解决办法吗? 听说Process.getOutputStream()
不能在xterm的工作,但还没有尝试过(因为我使用Windows。)
编辑 :Java程序我想执行使用的JLine,它使用JNI ...
要启动terminl
只需运行下面的代码:
new ProcessBuilder("/usr/bin/xterm").start();
但我想,这是不是你真正需要的。 因为,即使你传递命令来运行,比方说ls
作为参数:
new ProcessBuilder("/usr/bin/xterm", "-e", "ls").start();
你会得到输出xterm
(而不是从ls
)。 如果您想启动过程和获取输出,你需要做的是这样的:
public static void main(String[] args) throws Exception {
// get content of the "/usr/bin" directory
ProcessBuilder pb = new ProcessBuilder("ls", "/usr/bin");
pb.redirectErrorStream(true);
Process p = pb.start();
InputStream is = p.getInputStream();
System.out.println(toString(is));
is.close();
}
public static String toString(InputStream is) throws IOException {
Writer writer = new StringWriter();
char[] buffer = new char[1024];
Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
int n;
while ((n = reader.read(buffer)) != -1) {
writer.write(buffer, 0, n);
}
return writer.toString();
}