0

これはかなり簡単だと思いましたが、Process クラスとリダイレクトされた stdout に問題があります。Java プログラム (Craftbukkit、Minecraft サーバー ソフトウェア) を実行して、出力をリダイレクトしようとしています。

最初の 2 行はすべて正常に動作します

210 recipes
27 achievements

しかし、その行の後に続くすべての行は単に ">" です

>
>
>
>
>

正しい出力は次のようになります

210 recipes
27 achievements
20:52:45 [INFO] Starting minecraft server version 1.4.6
20:52:45 [INFO] Loading properties
20:52:45 [INFO] Default game type: SURVIVAL
20:52:45 [INFO] Generating keypair
20:52:46 [INFO] Starting Minecraft server on *:25565
20:52:48 [INFO] This server is running CraftBukkit version git-Bukkit-1.4.6-R0.3
-5-g82c58b5-b2589jnks (MC: 1.4.6) (Implementing API version 1.4.6-R0.4-SNAPSHOT)

20:52:49 [INFO] Preparing level "world"

e.Data の値を確認するためにブレークポイントを設定しました。タイプは文字列、値は ">" です。したがって、問題は出力ではありません。

コード:

static void Main(string[] args)
{
    ServerProcess p = new ServerProcess("craftbukkit.jar");
}

class ServerProcess
{

    public ServerProcess(string server_jar)
    {
        ProcessStartInfo pInfo = new ProcessStartInfo("java", "-jar " + server_jar);
        pInfo.RedirectStandardOutput = true;
        pInfo.RedirectStandardError = true;
        pInfo.UseShellExecute = false;

        Process p = new Process();
        p.StartInfo = pInfo;
        p.OutputDataReceived += new DataReceivedEventHandler(ServerOutputDataReceived);
        p.ErrorDataReceived += new DataReceivedEventHandler(ServerErrorDataReceived);
        p.Start();

        p.BeginOutputReadLine();
        p.WaitForExit();
    }

    static void ServerErrorDataReceived(object sender, DataReceivedEventArgs e)
    {
        Console.WriteLine("Error: {0}", e.Data);
    }

    static void ServerOutputDataReceived(object sender, DataReceivedEventArgs e)
    {
        Console.WriteLine("{0}", e.Data);
    }

}

何が起こっているか知っている人はいますか?どんな助けでも大歓迎です。

4

1 に答える 1

1

通常の非エラーメッセージがエラーのように処理されることがよくあります。エラーハンドラを追加しましたが、起動しませんでした。

p.BeginErrorReadLine();

編集:フォーマットせずにWriteLineも試してください

Console.WriteLine(e.Data);
于 2013-01-06T12:25:01.297 に答える