我正在尝试使用以下代码在 .jar 内启动一些 .jar:(我正在尝试使用 craftbukkit 服务器,知道)
Runtime rt = Runtime.getRuntime();
Process p = rt.exec("java -jar craft.jar");
BufferedReader out = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedWriter in = new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
this.running = true;
while(this.running){
String line;
if((line = out.readLine()) != null){
System.out.println(line);
}
}
问题是,它工作了一段时间,但过了一会儿它就停止输出或只打印“>”,如下图所示。我怎样才能解决这个问题? **另外,向 bukkit 服务器发送命令的正确方法是什么?
谢谢!
最佳答案
在 Java 中使用 Process
时,在两个独立线程(while 循环)中读取 stdout 和 stderr 至关重要。否则,子进程可能会锁定,等待已填充的缓冲区被耗尽。
使用 Java 7,您实际上可以将 stderr 重定向到 stdout,并且可能将结果流重定向到父级 stdout。对于旧版本,您需要附加单独的线程。
此外:您不应使用 exec 的“单字符串”变体,而应将参数指定为数组。这更安全(不易受到解析问题的影响)。
(但我不确定这是否是您的实际问题。也许您应该转储错误流并看看它是否有帮助)
关于java - 启动并获取 .jar 的输出(例如 Minecraft Bukkit .jar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24726209/