gpt4 book ai didi

java - 从 java 代码运行 jar 程序时,jar 程序的 gui 在直接输入时卡住

转载 作者:行者123 更新时间:2023-11-30 11:41:53 25 4
gpt4 key购买 nike

为了了解情况,我尝试描述我要实现的目标:我想创建一个 java 程序来启动另一个 java 程序(一个 minecraft 服务器),监视它的输出,并相应地向它的输入发送命令。

我能够从我的代码中启动 jar 程序,我也能够为它编写一个输出监听器,目前只将 jar 程序的输出打印到控制台。

我从我的代码运行的 jar 程序有一个带有文本输出面板的图形用户界面,它显示消息,还有一个输入字段(文本区域),我可以在其中发出命令。我的问题是,当我启动我的代码并启动程序时,一切正常,直到我想直接写入程序的输入字段。如果我在输入字段中键入任何字母,图形用户界面就会卡住。

我做错了什么?

这是我的代码:

public static void main(String[] args) {
try {
System.out.println("Starting.");
Runtime rt = Runtime.getRuntime();
Process proc = rt.exec("java -jar \"D:\\Program Files\\mc\\minecraft_server.jar\"");
// output both stdout and stderr data from proc to stdout of this process
StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream());
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream());
errorGobbler.start();
outputGobbler.start();

} catch (Exception e) {
System.out.println(e.getMessage());
}
}

输出阅读器:

public class StreamGobbler extends Thread {
InputStream is;

// reads everything from is until empty.
StreamGobbler(InputStream is) {
this.is = is;
}

public void run() {
try {
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null)
System.out.println(line);
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}

提前致谢! :)

最佳答案

首先,不使用stream gobbler,直接继承进程的io:

final ProcessBuilder p1 = new ProcessBuilder(command).inheritIO();
p1.start();

如果您不关心 stdin/out,请使用它来将所有内容定向到 NUL(/dev/null 的 Windows 版本):

p1.redirectInput(Redirect.from(new File("NUL"))).redirectOutput(Redirect.to(new File("NUL")))
.redirectError(Redirect.to(new File("NUL")));

程序还会崩溃吗?

关于java - 从 java 代码运行 jar 程序时,jar 程序的 gui 在直接输入时卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12073581/

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