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

标签 java linux process xterm x11

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

我知道我应该使用 ProcessBuilderRuntime.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/

相关文章:

multithreading - 如何确定 Matlab 使用的线程数?

java - 定义 'Set set = new HashSet()' 时,设置为接口(interface)或类 Set 的实例?

C++ setenv 解析其他变量

python - Matplotlib 不适用于 LInux。无法加载后端 'TkAgg'

c - "implicit declaration of function"与函数原版的区别

linux - linux命令行查看进程的命令行和环境变量的方法

process - 是否可以向 Erlang 中未注册的进程发送消息?

java - 循环退出条件有问题吗?

java - 如何确定数字的范围

java - Guice MapBinder : How to bind map<String, Hashset> 在Guice 中使用providesIntoSet?