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 的引用。

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

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

编辑 2

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

4

1 回答 1

6

首先,您需要System.err在重定向之前对其进行引用。

PrintStream oldError = System.err;

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

System.setErr(oldError);
于 2012-09-15T21:56:45.697 回答