0

如何在 Linux 中运行另一个 java 进程(带有控制台)?

我知道我应该使用ProcessBuilderRuntime.getRuntime().exec()执行命令,但我想知道如何显示单独的 X-window 命令终端(例如/usr/bin/xterm)或至少显示一个控制台终端查看窗口并使用 stdin、stdout 运行 java 进程,标准错误。

有什么解决办法吗?我听说Process.getOutputStream()在 xterm 上不起作用,但还没有尝试过(因为我使用的是 Windows ..)

编辑:我要执行的 java 程序使用jline,它使用JNI ...

4

1 回答 1

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();
}
于 2013-07-05T08:49:51.580 回答