2

私は、matlab UIを使ってJavaアプリケーションを作成しています。このため 、ここで説明したように、私はMathWorks社のMATLABでJavaオブジェクトを使用します。 http://www.mathworks.com/help/techdoc/matlab_external/f4873.htmlmatlabのJavaクラスを使用したクリーニングの問題

私は何をしたいことは、このようなMATLAB関数を作成されています。私はfooは、それならばとまったく同じ動作をしたい

function [] = foo 
    o = javaObject('myObject',parameters...); 
    o.memberfunction(parameters...); 

をJavaの主な機能でした。 fooの実行終了時にすべてがクリーンアップされるようにするには、静的クラスフィールドも必要です。問題が発生し

例:

first run foo: 
static fields are set to some values V 
second run foo: 
static fields are still set to values V 

私は、インスタンス0をクリアしようとしたが、これは何も解決しませんでした(後にMATLABは、明らかにインスタンスをクリーンアップしましたが、一方で)(かなり長いないクラスフィールド) 。

答えて

0

スイングを使用している場合は、プログラムによってメインウィンドウを閉じてJFrame.DISPOSE_ON_CLOSEを設定することで、GUIを破壊することができます。しかし、静的メンバーの目的は、このような状況で持続することです。統計の目的は何ですか?なぜあなたのアプリやメインウィンドウのインスタンス変数ではないのですか?

+0

すべてのインスタンスでよく共有されるため、インスタンス変数ではありません。私はすべてのインスタンスに同じインスタンスへの参照メンバを与えることができますが、私は、(コンストラクタ内の)インスタンスへの共通の参照を渡すことを暗示するので、メモリの割り当てはそのクラスのコンテキスト内ではなく抽象化/変調の目的私はこれをクラスの文脈の中に入れる必要があります。私は、私のアプリケーションをどのように振る舞うべきか、理論的には静的なフィールドを使うことができるはずの理由を理解するために投稿を編集しました。 – codelidoo

+0

終了したら、fooはMatlabを終了できます。 –

0

「clear java」コマンドは、おそらくあなたが望むことをするでしょう。それは、ロードされたすべてのJavaクラスをアンロードします。

Javaでは、main()メソッドを終了していないので、統計がクリーンアップされます。すべての非デーモンスレッドが終了したときにシャットダウンを準備するのはJVMです。 main()の実行は、それらのスレッドの1つに過ぎません。

おそらくインスタンス変数に変換するほうがよいでしょう。むしろ、これらの統計をすべて取り、別のクラスにパッケージ化し、すべてのインスタンスにそのクラスの単一の共有オブジェクトへの参照を持たせることです。

+0

私はあなたを正しく理解していれば、MATLABスレッドも終了せずに静的変数をクリアすることは不可能でしょうか?私はそれを破壊する代わりにguiを隠しているので、実行中のスレッドが残っています(日食では、私は手動で終了する必要があり、matlabでは私はそれが決して終了しないと思います。 matlabは開いていますか?)これにより、javaクリアを呼び出した後でも統計情報が設定されたままになることがありますか?すべての場合、このスレッドを終了させる方法はありません(matlabを終了させる(system.exitを呼び出す) – codelidoo