使用java来操作minecraft服务器的输入输出。

问题描述 投票:0回答:1

我试图通过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 等。

杀死进程,强行或不强行,在一个线程中启动它,我就会停止...

我既不能让文本也不能让命令工作。

java input output minecraft
1个回答
0
投票

文档 说cmd的命令应该带一个前导符。/.尝试发送 /stop 而不是 stop.

还要注意,这条线 line = r.readLine(); 一去不复返 null 当进程还活着的时候(默认情况下),就需要使用write()newline()然后flush()来发送任何东西到控制台。


0
投票

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

我的第二个问题是我的进程有一个死引用。

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

使用没用,\n不能代替newline()。

© www.soinside.com 2019 - 2024. All rights reserved.