gpt4 book ai didi

java - 将另一个程序的输出打印到 java 文本区域

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:50 26 4
gpt4 key购买 nike

我正在使用 Java 创建一个 GUI。此 GUI 使用 ProcessBuilder 类从命令行启动程序。

有关正在启动的进程的一些信息:从命令行,它创建另一个窗口并将信息打印到所述窗口。

在我的 GUI 窗口中,我有一个文本区域到我想重定向所述输出的地方。我最初打算使用 SwingWorker 对象来不断检查更多输出,而不是阻止 GUI。为了测试并确保我掌握了原始语法(甚至没有将 GUI 带入事物),我想我会将辅助进程窗口的输出打印到 System.out。但是,似乎出了点问题,因为我可以在辅助进程的窗口中看到输出,但看不到我工作的终端。

代码摘录如下:

Process p = pb.start(); 
Scanner s = new Scanner(p.getInputStream());

SwingWorker pipe = new SwingWorker<String, Void> (){
public String doInBackground(){
while(run){
if(s.hasNextLine()){
System.out.println("S has next!");
System.out.println(s.nextLine());
}
}
return null;
}
};
pipe.execute();

boolean run 在程序的其他地方定义,当进程 p 退出或强制退出时设置为 false(附加问题:这是一个非常糟糕的主意吗?我觉得它可能是......)。

有没有人知道为什么当我看到它被打印到另一个窗口时我从来没有得到任何输出?最初我的 react 是使用 p.getOutputStream() 但 Scanner 不将 outputStream 作为参数。

感谢您的宝贵时间。

最佳答案

您还应该扫描 p.getErrorStream() - 一些程序写入 STDERR,当从命令行运行时,它与 STDOUT 没有区别。使用这两个流通常是一种很好的做法,因为如果其中一个没有被使用,它会导致外部进程挂起。

关于java - 将另一个程序的输出打印到 java 文本区域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2008236/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com