我试图通过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
等。
杀死进程,强行或不强行,在一个线程中启动它,我就会停止...
我既不能让文本也不能让命令工作。
文档 说cmd的命令应该带一个前导符。/
.尝试发送 /stop
而不是 stop
.
还要注意,这条线 line = r.readLine();
一去不复返 null
当进程还活着的时候(默认情况下),就需要使用write()newline()然后flush()来发送任何东西到控制台。
好了,找到了,需要使用write()newline()然后flush()来向控制台发送任何东西。
我的第二个问题是我的进程有一个死引用。
销毁进程不起作用,但是停止命令起作用。
使用没用,\n不能代替newline()。