【问题标题】:Problem writing data from PrintStream to "Console as Process" and not "console as System.out" in Java在 Java 中将数据从 PrintStream 写入“作为进程的控制台”而不是“作为 System.out 的控制台”时出现问题
【发布时间】:2026-01-10 05:45:02
【问题描述】:

在 Java 8、Windows 10 中,我有一个文本应用程序,我想打开一个控制台并在那里写一些东西,

第一次尝试是:

    String [] cmd = {"cmd.exe", "/c", "start"};
    ProcessBuilder f = new ProcessBuilder(cmd);
    f.redirectErrorStream(true);
    Process p = f.start();
    PrintStream printStream=new PrintStream(p.getOutputStream());
    //
    System.setOut(printStream);
    System.out.println("this write in CMD"); //did not work 

第二次尝试是:

    printStream.println("this write in CMD");//did not work 

任何人都可以帮忙吗?

【问题讨论】:

  • 给 CMD.EXE 的命令start 会导致你的 CMD.EXE 启动一个新的命令窗口。这意味着您有 2 个 CMD.EXE 进程,而 Java 对第二个进程一无所知。

标签: java cmd processbuilder printstream


【解决方案1】:

改为启动conhost.exe,并写入保留进程的标准输入,或者如果您将输出流重定向到进程,则使用System.out 写入的进程将出现在新的控制台窗口中:

String [] cmd = {"conhost.exe"};
ProcessBuilder f = new ProcessBuilder(cmd);
f.redirectErrorStream(true);
Process p = f.start();
PrintStream printStream=new PrintStream(p.getOutputStream());
System.setOut(printStream);
System.out.println("dir");

【讨论】:

  • 谢谢,我试了试,没用,只是黑cmd
最近更新 更多