首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java:如何显式地将System.err重定向到控制台(即恢复默认行为)?

Java:如何显式地将System.err重定向到控制台(即恢复默认行为)?
EN

Stack Overflow用户
提问于 2012-09-16 05:30:25
回答 1查看 563关注 0票数 4

我正在为一个名为Max/MSP的封闭源代码应用程序编写插件。要使用Max/MSP,我的代码需要扩展供应商提供的一个类(com.cycling74.max.MaxObject)。此类覆盖了System.err,因此对System.err.println的调用可以将消息定向到应用程序提供的特殊错误日志。

这种行为在部署中很好,但在测试过程中就会出现问题。我目前正在尝试编写一个测试套件,以便在宿主应用程序之外运行我的代码。当我这样做时,调用System.err会引发异常,因为应用程序的错误日志不可用。

有没有人知道我如何“撤销”Max/MSP的错误重定向,这样在测试期间,对System.err.println的调用就会出现在java控制台中?

编辑

我尝试了@MadProgrammer的建议,在创建Max对象之前缓存对错误PrintStream的引用。

代码语言:javascript
运行
复制
import com.cycling74.max.*;

public class MyMaxObject extends MaxObject{

    public MyMaxObject(){}

    public static void main(String[] args){
        PrintStream oldError = System.err;
        MyMaxObject o = new MyMaxObject();
        System.setErr(oldError);
}

我不能让这个起作用。当我在调试器中运行这段代码时,我发现System.err在我的main方法的第一行有com.cycling74.io.ErrorStream类型。因此,到那时,重定向似乎已经发生了。如果是这种情况,我如何在错误流被重定向之前获得对它的引用?(如果不是放在Main的顶部,我到底该把代码放在哪里呢?)

编辑2

好了,我想通了。我只需要将我的测试代码(例如上面的Main方法)移到一个单独的类中。一旦我这样做了,@MadProgrammer的解决方案就完美地工作了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-16 05:56:46

首先,您需要在重定向之前引用System.err

代码语言:javascript
运行
复制
PrintStream oldError = System.err;

一旦你初始化了MaxObject (或者系统的任何部分覆盖了System.err,你需要重新分配引用...

代码语言:javascript
运行
复制
System.setErr(oldError);
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12442731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档