1

編集2Mathworksサポートからの応答を受け取った後、私は自分で質問に答えました。MWComponentOptions簡単に言うと、インスタンス化されたときにエクスポートされたクラスに渡されるオプションクラスがあります。これにより、特に、エラー出力と通常の出力(つまり、disp()-liked関数から)に一意の印刷ストリームを指定できます。それでもなお、すべての回答に感謝します:)

================================================== ==================

簡単な質問-コンパイル後にMATLABコードがdisp(および同様の)関数を使用してJavaコンソールに出力されないようにする方法はありますか?MATLABで情報をデバッグするのに役立つものは、すぐにJavaログの余分なテキストを煩わしくします。

私が使用しているコンパイルツールはMATLABコンパイラです(MATLAB Builder JAと同じではないと思いますが、間違っている可能性があります)。コマンドに関する適切なドキュメントが見つからないmccため、このためのオプションがあるかどうかはわかりません。

もちろん、これが不可能であり、コンパイラがすべてのMATLABコードを同等のJavaに変換した直接的な結果である場合、それは完全に理解できます。

前もって感謝します

編集これは、Java側だけでエラー報告を処理する場合にも役立ちます。現在、すべてのMATLABエラーは、キャッチされているかどうかに関係なく、コンソールに送信されます。

4

3 に答える 3

2

このisdeployed関数は、デプロイされたアプリケーション(MATLABCompilerやBuilderJAなど)で実行するとtrueを返し、ライブMATLABで実行するとfalseを返します。

dispステートメントをif isdeployedブロックで囲むことができます。

于 2012-12-12T12:02:15.047 に答える
2

Mathworksサポートへのリクエストから返信があり、次のソリューションが提供されました。

エクスポートされたクラスを作成するときに、MWComponentOptionsオブジェクトを指定できます。これはR2012bで十分に文書化されていませんが、私が望んでいたことについては、次の例が機能します。

MWComponentOptions options = new MWComponentOptions();
PrintStream o = new PrintStream(new File("MATLAB log.log"));

options.setPrintStream(o); // send all standard dips() output to a log file
// the following ignores all error output (this will be caught by Java exception handling anyway)
options.setErrorStream((java.io.PrintStream)null);

// instantiate and use the exported class
myClass obj = new myClass(options);
obj.myMatlabFunction();
// etc...

アップデート

誰かがすべての出力を抑制したい場合は、ケーシングnullが展開java.io.PrintStreamの原因になります。NullPointerExceptionすべての出力を抑制するためのより良い方法は、次のようなダミーの印刷ストリームを作成するために使用することです。

PrintStream dummy = new PrintStream(new OutputStream() {
    public void close() {}
    public void flush() {}
    public void write(byte[] b) {}
    public void write(byte[] b, int off, int len) {}
    public void write(int b) {}
} );

次に、

options.setErrorStream(dummy);

お役に立てれば :)

于 2012-12-13T10:17:57.757 に答える
1

スタンドアロンアプリケーションがあり、クラスをまったく気にしたくない場合に考えられるもう1つのハック:

evalcを使用して、コンパイル中にfunc名をデプロイします。

function my_wrap()
    evalc('my_orig_func(''input_var'')');
end

そして、次のようにコンパイルします

mcc -m my_wrap my_orig_func <...>

まあ、それは明らかにさらに別のハックです。

于 2013-03-05T15:33:40.543 に答える