4

Max/MSPと呼ばれるクローズドソースアプリケーション用のプラグインを書いています。Max / MSPを使用するには、ベンダーが提供するクラス(com.cycling74.max.MaxObject)をコードで拡張する必要があります。このクラスはをオーバーライドするため、アプリケーションが提供する特別なエラーログにメッセージを送信するためのSystem.err呼び出しが行われます。System.err.println

この動作は展開では問題ありませんが、テスト中に問題が発生します。現在、ホストアプリケーションの外部でコードを実行するテストスイートを作成しようとしています。System.errこれを行うと、アプリケーションのエラーログが利用できないため、例外を発生させるために呼び出します。

Max / MSPのエラーリダイレクトを「元に戻す」方法を知っている人はいますか?テスト中に呼び出しがSystem.err.printlnJavaコンソールに表示されるようにしますか?

編集

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のソリューションは完全に機能しました。

4

1 に答える 1

6

System.errまず、リダイレクトされる前にへの参照が必要です。

PrintStream oldError = System.err;

初期化したらMaxObject(またはシステムのどの部分でもオーバーライドするSystem.err場合は、参照を再割り当てする必要があります...

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