java - 使用 java 来操作 minecraft 服务器输入/输出
问题描述
我正在尝试通过 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
在进程处于活动状态时返回(默认情况下)。
推荐阅读
- python - 如何使用 selenium 从页面中提取 URL 列表?
- node.js - 电子邮件数据库结果
- python-3.x - 从输入文件将字符串更改为日期时间
- ios - 金属的正确使用方法
- java - 重构时Java不兼容类型推断错误
- javascript - 为什么我的基于地理编码的地址验证器不输出到 Google 表格?
- serverless-framework - GKE CloudRun - 请求级别的资源控制
- typescript - 如何在 onCreate 中创建自定义声明?
- sql - SQL Server 中基于列值的条件聚合
- node.js - roles.forEach 不是函数