2

静的変数を持つ midlet があります。この変数で作成されたすべてのインスタンスの記録を保持する必要があります。ただし、静的変数のようには機能しません。私のコードセグメントは次のようになります。この midlet を Sun Wireless Toolkit 2.5.5 で実行しています。そのツールキットから同じ midlet の多くのオブジェクトを作成できますが、それでもカウンターには 1 つしか表示されません。

public class SMS extends MIDlet implements CommandListener {

   private Display display;
   private TextField userID, password ;
   public static int counter ;

   public SMS() {

      userID = new TextField("LoginID:", "", 10, TextField.ANY);
      password = new TextField("Password:", "", 10, TextField.PASSWORD);
      counter++;

   }

 public void startApp() {

      display = Display.getDisplay(this);
      loginForm.append(userID);
      loginForm.append(password);
      loginForm.addCommand(cancel);
      loginForm.addCommand(login);
      loginForm.setCommandListener(this);
      display.setCurrent(loginForm);

  public void commandAction(Command c, Displayable d) {

     String label = c.getLabel();
     System.out.println("Total Instances"+counter);

毎回、カウンターには作成されたオブジェクトが1つだけ表示されます。

4

2 に答える 2

1

MIDlet は一度だけインスタンス化されます。すこし。

MIDP ランタイムでは、同じ MIDlet が既に実行されている場合、同じ MIDlet を 2 回起動することはおそらく許可されません。

MIDlet を終了すると、カウンタは RAM 内の値のままであり、Java 仮想マシン プロセスが終了するため、0 に戻ります。

一部の Nokia series40 電話では、JVM プロセスが終了しないため、これを使用して、最後に電話の電源を入れてから MIDlet が作成された回数を示すことができます。

静的変数は、JVM メモリ内の Class オブジェクトに格納されます。静的変数に格納できるものを理解するには、クラスのロード (および J2ME でクラスのアンロードが通常サポートされていないこと) を理解する必要があります。

MIDlet が前面に出されるたびに呼び出される可能性があるため、に移動counter++;することをお勧めします。startApp()

これにより、精度を高めるために RMS レコードにカウンターを保存することもできます。

于 2009-08-28T14:04:13.287 に答える
1

アプリケーションの「呼び出し」の間に静的変数を残すことを許可する唯一のシステムは Android です。MIDlet の呼び出し間で静的データを維持する J2ME デバイスを見たことがありません。ただし、MIDlet スイート内の MIDlet は、ここで説明されているように、少なくとも 1 つの MIDlet が実行されている間、静的データを共有できます。

MIDlet の呼び出し間でデータを維持したい場合は、永続ストアへのアクセスを提供する javax.microedition.rms のレコード ストア API を使用する必要があります。

于 2009-11-03T18:52:33.700 に答える