2
为了理解这种情况,我试着描述一下我想实现的: 我想创建一个启动另一个java程序的java程序(一个Minecraft服务器),监视它的输出,并相应地发送命令给它的输入。当从java代码运行jar程序时,jar程序的gui冻结在直接输入上
我能够从我的代码启动jar程序,我也能够为它编写一个输出监听器,它目前只能将jar程序的输出打印到控制台。
我从我的代码运行的jar程序有一个文本输出面板,它显示消息和一个输入字段(textarea)我可以给命令的GUI。我的问题是,当我开始我的代码,它启动程序一切正常,直到我想直接写入程序的输入字段。如果我在输入字段中输入任何字母,则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();
}
}
}
提前感谢! :)
为了简单起见,合并'out'&'err'流。实际上在那里看到两条溪流,我愚蠢地认为狼吞虎咽正在消耗输出流,但当然它正在读'错误'。 ***消费'out'流!***并通过[exec info链接的文章。页面](http://stackoverflow.com/tags/runtime.exec/info)&执行所有其他建议。 –
感谢您的建议,但问题依然存在:为什么gui会冻结?我只是在运行这个程序。我没有锻炼任何东西...... – Angezerus
很好,你实施我的建议和编辑问题..哦,等等,你没有打扰。 *“问题依然存在:”*好吧,你是一个有着明确动机去解决问题的人,所以我会接受评论1中推荐的那些东西。祝你好运! –