如何在java中使用控制台运行另一个java进程(在Linux中)

时间:2013-07-05 07:18:13

标签: java linux process xterm x11

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

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

有什么解决方案吗?我听说Process.getOutputStream()对xterm不起作用,但还没有尝试过(因为我正在使用Windows ..)

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

1 个答案:

答案 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();
}