为了理解这种情况,我尝试描述我想要实现的目标:我想创建一个 java 程序来启动另一个 java 程序(一个 minecraft 服务器),监控它的输出,并相应地向它的输入发送命令。
我能够从我的代码中启动 jar 程序,并且我还能够为它编写一个输出侦听器,目前仅将 jar 程序的输出打印到控制台。
我从我的代码运行的 jar 程序有一个带有文本输出面板的 gui,它在其中显示消息,以及一个输入字段 (textarea),我可以在其中给出命令。我的问题是,当我启动代码并启动程序时,一切正常,直到我想直接写入程序的输入字段。如果我在输入字段中输入任何字母,gui 就会冻结。
我错了什么?
这是我的代码:
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();
}
}
}
提前致谢!:)