2009-08-28 11 views
2

私は静的変数を持っているミッドレットを持っています。この変数に作成されたすべてのインスタンスの記録を保持する必要があります。静的変数のようには機能しません。私のコードセグメントはこのように見えます。私は、Sun Wireless Toolkit 2.5.5でこのMIDletを実行しています。私はそのツールキットから同じミッドレットの多くのオブジェクトを作成することができますが、それでも私のカウンターは1Midletは静的変数をどのように呼び出すことができますか?

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オブジェクトをそれぞれ示します。

答えて

1

あなたのMIDletは一度だけインスタンス化されます。やや。

MIDPランタイムでは、既に実行中のMIDPランタイムを2回起動することはできません。

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

一部のNokia Series40電話機では、JVMプロセスが終了することはありません。このため、最後に電話機をオンにしてからMIDletが作成された回数を表示できます。

静的変数は、JVMメモリのClassオブジェクトに格納されます。静的変数に格納できるものを理解するためには、クラスのロード(J2MEのクラス・アンロードのサポートの欠如)を理解する必要があります。

counter++;startApp()に移動することをお勧めします。これは、MIDletをフォアグラウンドにするたびに呼び出すことができるためです。

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

1

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

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

関連する問題