java - 启动并获取 .jar 的输出(例如 Minecraft Bukkit .jar)

标签 java jar bukkit

我正在尝试使用以下代码在 .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 服务器发送命令的正确方法是什么?

An img of the error

谢谢!

最佳答案

在 Java 中使用 Process 时,在两个独立线程(while 循环)中读取 stdout 和 stderr 至关重要。否则,子进程可能会锁定,等待已填充的缓冲区被耗尽。

使用 Java 7,您实际上可以将 stderr 重定向到 stdout,并且可能将结果流重定向到父级 stdout。对于旧版本,您需要附加单独的线程。

此外:您不应使用 exec 的“单字符串”变体,而应将参数指定为数组。这更安全(不易受到解析问题的影响)。

(但我不确定这是否是您的实际问题。也许您应该转储错误流并看看它是否有帮助)

关于java - 启动并获取 .jar 的输出(例如 Minecraft Bukkit .jar),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24726209/

相关文章:

java - 有没有人想出如何使 javafx tableview 像 jtable 一样工作?

java - 如何创建一个 jar 。在类里面使用它。在命令行中使用 jar 执行类?

java - MongoDB 中的位置倒排索引

java - Android - 实现加密 IM 的最佳方式

java - 将 GitHub 存储库文件导出到可用的 JAR 可执行文件,问题

java - 无法使用相对路径从资源文件夹获取 JSON 文件

java - 遍历一个字符串并为每个字符添加不同的值作为前缀

java - 存储多人 PvP 数据的有效方法?

java - Spigot/Bukkit - 获取箱子库存 - Java

java - 对集合中的项目求和以获得目标值的方法数量 - 顺序很重要