如何在 Linux 中运行另一个 java 进程(使用控制台)?
我知道我应该使用 ProcessBuilder
或 Runtime.getRuntime().exec()
来执行命令,
但我想知道如何显示一个单独的 X 窗口命令终端(例如 /usr/bin/xterm
)或至少显示一个控制台终端窗口并使用 stdin 运行 java 进程,stdout,stderr。
有什么解决办法吗?我听说 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();
}
关于java - 如何在 Java 中使用控制台运行另一个 Java 进程(在 Linux 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483199/