1

したがって、私のプログラムでは、いくつかの異なるオブジェクトを配列に格納しています。配列のインデックスとなる数値をランダムに生成し、そのオブジェクトを (9 回) 複製して、画面上にオブジェクトの 3x3 グリッドを作成します。

今私の問題は、3x3 グリッドを取得した後、それを消去して、配列内にあるオブジェクトの新しいグリッドを生成できるようにすることです。問題は、メモリの無駄のように見えるディスプレイからクローンを移動する以外に、これらすべてのクローンを取り除く方法が思いつかないことです。400 回の試行を行いたいので、最終的には多くのクローン オブジェクトが作成されます。

これらの複製されたオブジェクトを削除する方法はありますか? 配列内のオブジェクトの 1 つがグリッドで 2 回使用される可能性があるため、新しいオブジェクトを作成する必要があります。

4

3 に答える 3

2

Javaガベージコレクターがそれをやってくれると思います。オブジェクトが誰からも参照されていない場合、システムがこれを認識したときに削除されます。しかし、「それらをディスプレイの外に移動する」とはどういう意味ですか? それらが「グラフィックオブジェクト」である場合、それらは他のオブジェクト(JFrameなど)内にある必要があるため、メソッドを使用してJFrameオブジェクト(またはその他)に参照を破棄するか、参照を別のもので上書きするように指示する必要があります。

于 2010-11-20T19:16:23.150 に答える
0

参照はまだコンテナ内に残っているためです。myJFrameObject.getContentPane.add(object_to_display);のようなことをしたと思います。したがって、参照はmyJFrameObject内にあり、たとえばmyJFrameObject.getContentPane.removeを使用できます。必要に応じて、setVisible(false)を使用してフレームを非表示にすることができます。状況によります。

于 2010-11-20T20:29:03.020 に答える
0

実際のオブジェクトを扱っているのではなく、メモリ内のオブジェクトへのポインターまたは参照を扱っていることを理解するのに役立ちます。そう:

Object obj = new Object();

オブジェクトではなく、メモリ内のオブジェクトへのリンクです。リンクをnullに設定するか、別のオブジェクトへのリンクに置き換えることでリンクを削除すると、古いオブジェクトが削除されます...っぽい。ガベージ コレクションが実行されると、削除されます。そう:

obj = null;

obj = new Object();

基本的に古いオブジェクトを削除します。同じことがオブジェクトの配列にも当てはまります。実際のオブジェクトの配列ではなく、オブジェクトへのリンクの配列を扱っています。そのため、配列内の位置を null に設定するか、位置を新しいオブジェクトに設定すると、古いオブジェクトが削除されます。そう:

ObjArray[4] = null;

ObjArray[4] = new Object;

古いオブジェクトを削除します。

編集:私が言及するのを忘れていたと思います.メモリ内の単一のオブジェクトは、それに複数のリンクを持つことができ、オブジェクトがガベージコレクションによって削除される位置にあるのは、それらのリンクがすべて削除されるまでではありません.

Object obj = new Object();
ObjArray[4] = obj;
obj=null;

上記の場合、obj が null に設定されている場合、最初に作成されたオブジェクトは削除されません。これは、オブジェクトへのリンクがまだ ObjArray に存在するためです。オブジェクトがなくなる前に、obj と ObjArray[4] の両方を null に設定する必要があります。

于 2010-11-20T19:39:02.263 に答える