0

无论如何从我的程序中调用的类的方法获取或拦截输出流(特别是 System.out)?

我正在创建一个Method名为 的新对象mainURLClassLoader用于加载类,然后main.invoke();使用适当的参数进行调用。

我希望能够从该方法的执行中捕获输出,它仍然显示在屏幕上是可以的,但我也需要能够处理输出。

注意:此方法实际上是一个将连续运行的服务器应用程序。

如果需要进一步澄清,请告诉我,如果这样的事情是可能的,请告诉我。

谢谢你的帮助!

4

1 回答 1

1

假设您正在谈论 System.out 或 System.err 输出流......

实现您建议的最佳方法是将 OutputStream 作为参数传递。这可能是System.out但可以很容易地更改为您想要的任何内容。

在不传递参数的情况下执行此操作的一种方法是将默认 System.out 替换为您自己的,它会检查堆栈以确定从何处调用它。我建议你这样做,除非没有其他选择。例如,您无法访问您正在调用的方法的代码。

如果您在谈论其他一些输出流,则必须将使用的输出流的代码替换为允许您跟踪输出的代码。这是最骇人听闻的解决方案,但它会起作用。

于 2012-06-24T10:25:57.010 回答