使用 java 操纵 minecraft 服务器 input/output

using java to manipulate a minecraft server input/output

我正在尝试通过 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

之前有或没有 /

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

我无法使用文本或命令。

document 表示来自 cmd 的命令应带有前导 /。 尝试发送 /stop 而不是 stop.

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

好的,找到了,需要使用 write() newline() 然后 flush() 将任何内容发送到控制台。

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

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

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