3

私はこの問題に 2 日間取り組んできましたが、解決できるリソースは見つかりませんでした。

Matlab (バージョン 7.13.0.564 (R2011b)) から Java クラス (下部にリンクを追加) を呼び出そうとしています。Java 1.6 を使用して Java クラスを .class ファイルにコンパイルし、javaaddpath を使用してファイルが配置されているフォルダーへのパスを追加しました (もちろん、動的パスのリストでパスが正しいことを確認しました)。ただし、 javaMethod('main','PerlinNoiseGenerator','') を使用して Matlab からクラスを呼び出そうとすると、エラーが発生します。

「クラス PerlinNoiseGenerator を Java クラスパスに配置できません」

Matlab から Java を呼び出した経験のある人が、これを行う方法について短い説明をまとめることができれば、非常に感謝しています。私はおそらく自分のコードを配布するつもりなので、Java パスを動的に設定する必要があり、私が読んだことから、それが問題の原因である可能性があることを示す投稿を見たことがありますが、実際には可能であるはずです。

http://svn.j3d.org/code/tags/Xj3D-M10/src/java/org/j3d/texture/procedural/PerlinNoiseGenerator.java

4

2 に答える 2

6

通常、Java クラスを含む jar ファイルを作成します。また、以前は個々の Java クラスのロードに問題がありました。あなたの場合、特定のクラスをロードするために、xubuntu 13.04 x64 および Matlab 2013a x64 で次のことを行いました。

  1. クラスがパッケージなど-d .を定義するため、一連のパッケージフォルダーを作成するオプションを指定して、Java 6 (デフォルトの 7 ではない) を使用してコンパイルします。org/j3d/texture/proecedural/

    /usr/lib/jvm/java-6-openjdk-amd64/bin/javac -d . PerlinNoiseGenerator.java これにより、クラスがコンパイルされ、現在のディレクトリ (したがって.) に一連のパッケージ フォルダーが作成されます。

  2. jarJava 6を使用して、クラスを含むjarファイルを再度作成します。名前を付けましたjavaNoise.jar

    /usr/lib/jvm/java-6-openjdk-amd64/bin/jar cf javaNoise.jar ./org/j3d/texture/procedural/PerlinNoiseGenerator.class

  3. Matlab では、次のディレクトリにありjavaNoise.jarます。

    javaaddpath('./javaNoise.jar');

  4. Java クラスのオブジェクトを作成します。

    png=org.j3d.texture.procedural.PerlinNoiseGenerator()

    % results in: png = org.j3d.texture.procedural.PerlinNoiseGenerator@3982a033

  5. テストするために、1D ノイズを生成しました。

    png.noise1(1.2)

    ans = -0.0960

お役に立てれば。

このクラスにはメインメソッドがないため、 PS javaMethod('main','PerlinNoiseGenerator','')は機能しません:-)。

于 2013-07-25T12:09:44.903 に答える
0

コンストラクターのコンパイラーへの表記は、「実行時に呼び出される適切なコンストラクターを使用する」ことを意味するポリモーフィッククラスです。

public PerlinNoiseGenerator()

public PerlinNoiseGenerator(int シード)

引数なしの最初のフォームを呼び出すことはできますが、this(DEFAULT_SEED) を含む行はそれ自体を呼び出そうとしますが、使用できるコンストラクターは 1 つだけであるため、無関係です。

2 番目のコンストラクターには引数として int がありますが、既に読み込まれているクラスによって読み込まれる必要があります。

最初のバージョンを使用し、引数を持つ名前の大文字と小文字を区別する名前を変更し、これ (DEFAULT_SEED) を削除して、メソッド名 (引数を持つコンストラクターから変更したもの) に置き換えます。 例 public perlinNoiseGenerator(int シード)

注: 慣例により、Java コードのメソッド名は小文字で始まります。

最後に、コマンド ラインからの Java 引数は、アプリケーション (GUI またはコマンド プロンプト) のスターター メソッドである「main」メソッドを介して「String」データ型として入力されます。メイン メソッド引数の最初の引数は、最初のコマンドライン引数です。

public static void main(String[] Args){
new PerlinNoiseGenerator(Args); // recursive class call
}//end main method

int[] args; // global
public PerlinNoiseGenerator(String[] Args){
int arglength=Args.length();
args = new int[arglength];
for(int cnt=0;cnt<arglength;cnt++){
Args[cnt].trim();
args[cnt]=new Integer(Args[cnt]).intValue();
}//enfor
perlinNoiseGenerator(args[0]); // call method
}//end constructor
于 2013-07-25T14:14:26.600 に答える