2013-01-06 122 views
0

我认为这将是非常直接的,但我有问题的流程类和重定向标准输出。我试图运行一个Java程序(Craftbukkit,Minecraft服务器软件)并重定向输出。重定向标准输出数据“>”

一切正常,前两行

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

} 

有谁知道发生了什么事?任何帮助,将不胜感激。

回答

1

正常情况下,非错误消息的处理就像错误一样。 您添加了错误处理程序,但未启动它。

p.BeginErrorReadLine(); 

编辑: 也可以尝试的WriteLine,不进行格式化

Console.WriteLine(e.Data); 
+0

这工作,谢谢。奇怪它认为他们是错误的,但我会采取任何行动。 – pix64

+0

@ user1952744欢迎您:) – VladL