【问题标题】:using java to manipulate a minecraft server input/output使用 java 来操作 minecraft 服务器输入/输出
【发布时间】:2020-06-12 00:09:23
【问题描述】:

我正在尝试通过 java 管理我的 minecraft 服务器,但即使我可以轻松读取输出,我也无法获取命令甚至文本:

ProcessBuilder builder = new ProcessBuilder(
        "cmd.exe", "/c", "cd C:\\my\\path\\ && java -jar server.jar nogui");
builder.redirectErrorStream(true);
Process p;

p = builder.start();
this.p = p;

BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (loop) {
    line = r.readLine();
    if (line == null) { break; }
    System.out.println(line);
}

这很好用,但是当我尝试发送命令时它根本不起作用:

OutputStream os = BotData.minecraftServer.getOutputStream();
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(os));
String stop = "stop";
try {
    out.write(stop + "\n");
    out.write("\n");
    out.flush();
} catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

我试过"Command:>>" + stop + "\n"stop 之前有或没有/ 等等。

强制或不强制终止进程,在线程中启动它然后我会停止......

我无法让文本或命令工作。

【问题讨论】:

  • BotData.minecraftServer。是第一个块中的进程 p

标签: java input output minecraft


【解决方案1】:

document 表示来自 cmd 的命令应该以 / 开头。 尝试发送/stop 而不是stop

另外请注意,line = r.readLine(); 行可能永远不会在进程处于活动状态时返回 null(默认情况下)。

【讨论】:

  • 我确实尝试过,但没有发生任何不同,其他一些堆栈线程谈到在命令之前使用诸如“Command:>>”之类的东西,它也没有做任何事情,无论有没有 /
【解决方案2】:

OK 找到了,需要使用 write() newline() 然后 flush() 来发送任何东西到控制台。

我的第二个问题是对我的流程的死引用。

销毁进程不起作用,但停止命令可以。

使用 / 没用,\n 不会替换 newline()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-08
    • 2015-10-31
    • 2018-02-14
    • 2011-05-13
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    相关资源
    最近更新 更多