如何在Linux中运行另一个java进程(带控制台)?
我知道我应该使用ProcessBuilder
或Runtime.getRuntime().exec()
来执行命令,
但是我想知道如何展示一个单独的X-window命令终端(例如/usr/bin/xterm
)或者至少显示一个控制台终端查看窗口并运行stdin,stdout,stderr的java进程。 / p>
有什么解决方案吗?我听说Process.getOutputStream()
对xterm不起作用,但还没有尝试过(因为我正在使用Windows ..)
编辑:我想要执行的java程序使用 jline ,它使用 JNI ......
答案 0 :(得分:1)
要启动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();
}