1

私はMatlabで作業し、そこからJavaクラスを起動しようとしています. そこで、Java クラスのパスをclasspath.txtMatlab に追加します。次に、Java クラスのオブジェクトを作成すると、HelloWorld完全に機能します。

o = HelloWorld;
javaMethod('main', o);

しかし、 のコードを変更するとHelloworld、Matlab はこれを認識しません: の変更されたコードを操作するには、Matlab を再起動する必要がありHelloworldます。

再起動せずに Matlab に変更を強制的に表示させる方法はありHelloworldますか?

4

1 に答える 1

2

clear classes成功せずにMatlabを試したと思います

Yair Altman " Undocumented Secrets of MATLAB-Java Programming " から引用すると:

Java クラスの署名を変更していなければ、それを回避できる可能性があります。

Matlab の外で再コンパイルすると、Java クラスは Matlab によって自動的に再ロードされません。変更された Java クラスをリロードするには、Matlab を再起動して JVM を再起動する必要があります。動的クラスパスに配置されたクラスについては、clear(‘java’)すべてのグローバルをクリアするという副作用を思い出しながら、Matlab のコマンドを試すことができます。ただし、これは常に機能するとは限りません (たとえば、クラスの署名が変更された場合)。

どうやら、あなたが熟練した Java プログラマーのように感じる場合は、潜在的な回避策があります。

熟練した Java プログラマーは、Matlab を再起動したり Java をクリアしたりする代わりに、プロキシ クラスローダーに関する Paul Milenkovic の提案を使用することができます。Dan Spielman は次のように説明しています。再コンパイルした後、クラスローダーを強制終了し、その新しいインスタンスを作成します。これにより、再コンパイルされたクラスが読み取られます。

しかし、結論は次のとおりです。

実際には、 Java クラスが再コンパイルされた後に Matlab を再起動することをお勧めします。Matlab がメモリ内に古いクラスを保持するためにのみ発生する、多くのイライラするデバッグや追跡エラーを回避できます。

于 2014-10-05T09:22:14.730 に答える