gpt4 book ai didi

java - Process.getOutputStream() 不起作用?

转载 作者:行者123 更新时间:2023-12-01 14:09:58 24 4
gpt4 key购买 nike

所以我从 GUI 启动 Bukkit (Minecraft) 服务器。

ProcessBuilder builder = new ProcessBuilder();
builder.redirectErrorStream(true);
builder.command("java", "-jar", file.getAbsolutePath());

try {
p = builder.start();
input = new BufferedReader(new InputStreamReader(p.getInputStream()));
output = new DataOutputStream(p.getOutputStream());
} catch (IOException e) {
Logger.logError(e);
return;
}

没有错误,服务器本身启动正常。输入流也可以正常工作,因为我得到了应有的所有输入。现在,我有这个方法来向服务器发送命令。

public void send(String message) {
try {
output.writeUTF(message + "\n");
output.flush();
} catch (IOException e) {
Logger.logError(e);
}
}

但由于某种原因,它不起作用。我不确定我是否错过了某个步骤,或者正在查看某些内容等。任何帮助将不胜感激!

最佳答案

我怀疑 DataOutputStream 正在以非常规方式向 OutputStream 写入数据,请尝试使用 PrintWriter 对象。

考虑一下:

try {
p = builder.start();
input = new BufferedReader(new InputStreamReader(p.getInputStream()));
output = new PrintWriter(p.getOutputStream());
} catch (IOException e) {
Logger.logError(e);
return;
}


发送方法:

public void send(String message) {
output.println(message);
output.flush();
}

P.S 您不再需要在 output.println() 周围使用 try-catch,因为 PrintWriter 的 print 和 println 方法不会抛出 IOException。

从 bukkit 的插件角度来看(如果你不知道这是什么,请阅读我的评论):

final JavaPlugin Inst = ... //This plugin's object

try(BufferedReader Reader = new BufferedReader(new InputStreamReader(System.in, Charset.forName("UTF-8")))){
while((Line = Reader.readLine()) != null){
final String L = Line;
Bukkit.getScheduler().runTask(Inst, new Runnable(){
@Override
public void run() {
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), L);
}
});
}
}catch(IOException ex){
//Handle this
}

关于java - Process.getOutputStream() 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18602037/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com