如何使用控制台的Java运行另一个Java程序(在Linux中)(How to run anothe

2019-10-28 23:17发布

我怎么可以运行Linux的其他Java进程(与控制台)?

我知道我应该使用ProcessBuilderRuntime.getRuntime().exec()执行命令,但我想知道我该怎么让一个单独的X-window命令终端(例如, /usr/bin/xterm ),或至少示出了控制台的终端看窗口,并用标准输入,标准输出,标准错误在运行一个Java过程。

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

编辑 :Java程序我想执行使用的JLine,它使用JNI ...

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


文章来源: How to run another java process with console in java (in Linux)