2012-08-01 48 views
0

我在Java中遇到了一些麻烦。我想要的很简单, 我正在开发一款知名游戏Minecraft的插件,并且我需要能够解析出现在STOUT中的每一行控制台输出。拦截和解析日志记录器或控制台输出而不会干扰它

我在互联网上浏览过,但我似乎无法找到任何我可以用来做到这一点。我知道某些控制台输出是通过默认记录器,有些是通过system.out。我有一个函数parseConsole(String line),它将解析这条线并做一些事情,如果它包含一个单词等等等等。我希望为控制台上显示的每行输出调用该函数,但它不能中断流,如每一行仍然会被我的函数解析后发送到控制台。

+0

看到这个[答案] [1]。基本上你想要一个发球台。 [1]:http://stackoverflow.com/a/6043744/101562 – 2012-08-03 16:35:57

回答

1

您可以使用System.setOut()来替换控制台PrintStream。您可以将其替换为检查文本到控制台的实现。

这里是一个如何筛选的例子:

public class MyFilterPrintStream extends PrintStream { 
    @Override public void print(String s) { 
    // ... process output string here ... 

    // pass along to actual console output 
    super.print(s); 
    } 
} 

// install my filter 
System.setOut(new MyFilterPrintStream(System.out)); 
+0

感谢您的回答。我认为这可能与此有关。我知道我可以将它分配给一个ByteArrayOutputStream,但我不明白如何让插件在每次输出到控制台时读取流。你能否给我提供一个最简单的例子?我是否需要循环流,直到它有内容,然后在完成时清除它?我如何分隔线条?通过“\ n”?我研究过,但我找不到任何坚实的东西。谢谢。 – Jishaxe 2012-08-08 20:48:14

+0

@Jishaxe - 用示例方法更新答案。 – jtahlborn 2012-08-12 02:20:47

相关问题