Max/MSPと呼ばれるクローズドソースアプリケーション用のプラグインを書いています。Max / MSPを使用するには、ベンダーが提供するクラス(com.cycling74.max.MaxObject)をコードで拡張する必要があります。このクラスはをオーバーライドするため、アプリケーションが提供する特別なエラーログにメッセージを送信するためのSystem.err
呼び出しが行われます。System.err.println
この動作は展開では問題ありませんが、テスト中に問題が発生します。現在、ホストアプリケーションの外部でコードを実行するテストスイートを作成しようとしています。System.err
これを行うと、アプリケーションのエラーログが利用できないため、例外を発生させるために呼び出します。
Max / MSPのエラーリダイレクトを「元に戻す」方法を知っている人はいますか?テスト中に呼び出しがSystem.err.println
Javaコンソールに表示されるようにしますか?
編集
Maxオブジェクトを作成する前に、エラーPrintStreamへの参照をキャッシュするという@MadProgrammerの提案を試しました。
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
タイプがあることがわかります。com.cycling74.io.ErrorStream
したがって、リダイレクトはその時点ですでに行われているようです。この場合、リダイレクトされる前にエラーストリームへの参照を取得するにはどうすればよいですか?(地球上のどこにそのコードを配置しますMain
か?)
編集2
わかりました、それを理解しました。テストコード(Main
上記のメソッドなど)を別のクラスに移動する必要がありました。これを実行すると、@MadProgrammerのソリューションは完全に機能しました。