0

そこで、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);
    }
}

なんらかの理由がありますが、機能しません。ステップを見逃したのか、何かを調べているのかなどはわかりません。どんな助けでも大歓迎です!

4

1 に答える 1

1

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;
}


Send メソッド:

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

PS PrintWriter の print および println メソッドは IOException をスローしないため、output.println() の周りの try-catch は不要になりました。

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
}
于 2013-09-04T18:47:54.517 に答える