2012-03-22 12 views
4

私はJavaとの統合でMatlabを使用しており、Java JARファイルをリンクすることができ、Matlab内からJavaオブジェクトを作成してメソッドを呼び出すことができます。問題はリソースにあります。たとえば、JARのルートにXMLファイルがある場合、Javaアプリケーション内からXMLファイルを正常に読み込むことはできますが、Matlabから読み込むことはできません。MatlabがJARリソースを読み込めません

MatlabがJARファイル内のリソースにアクセスする方法を知っている人はいますか?

ありがとうございました。

+0

これらのライブラリは万一JNIライブラリに依存していますか?次に、MATLABに付属のネイティブライブラリがformersと互換性があることを確認する必要があります。 –

答えて

0

通常のJava Class.getResourceメソッドは、Matlabから呼び出されたときに機能します。 JavaとMatlabでリソースをロードしようとする構文は何ですか? getResourceを使用している場合、リソースを保持するのと同じJARからロードされたクラスで呼び出していますか?

Matlabでは、静的および動的クラスパス上のクラスは、異なるClassLoaderを使用します。動的クラスパス上のJAR内のリソースは、静的クラスパス上のクラスには表示されないことがあります。したがって、JARが動的クラスパス上にある場合は、同じClassLoaderから来たクラスに対してgetResourceが呼び出されるようにする必要があります。

+0

Class.getResource()はリソースを記述する有効なjava.net.URLを返しますが、URL.openStream(MATLAB内)を呼び出すとFileNotFoundExceptionがスローされます – Clark

+0

これはちょっと驚きです。私はgetResource()が、私が話していた単純な静的/動的クラスパスの不一致の場合にnullを返すことを期待していますが、URLオブジェクトがあればopenStream()が機能します。取得したURL文字列、FileNotFoundExceptionの正確なエラーメッセージ、可能であればこれらの呼び出しを行う正確なMatlabコードを含む具体的な例を追加できますか?また、openStream()を呼び出してopenConnection()とgetInputStream()を別々に呼び出して、どこでエラーが発生しているのかを正確に確認することもできますか? –

+0

ああ、申し訳ありませんクラーク、私はあなたがコメントを残してOPと思った。あなたは同じ状況の証言をしていますか? –

1

jarファイルをMATLABの動的Javaクラスパスに追加すると(たとえばjavaaddpathを使用して)、jarファイルに含まれるリソースはJavaコードには表示されません。 thisで説明したように、MATLABの動的クラスパス上の項目は、実際にはJVMのクラスパスにはありません。私のjarファイルのリソースにアクセスするために、静的なクラスパスにjarファイルを追加しました。これは、使用しているjarファイルのリストを含むMATLABを起動するディレクトリにjavaclasspath.txtという名前のファイルを作成することによって、MATLAB R2012bで実行できます。 Relevant MATLAB documentation

関連する問題