Java me Midlet如何调用静态变量?

Java me Midlet如何调用静态变量?,java-me,midlet,Java Me,Midlet,我有一个midlet,它有一个静态变量。我需要保留在此变量中创建的所有实例的记录。但它不像静态变量那样工作。我的代码段如下所示。我正在sun wireless toolkit 2.5.5上运行此midlet。我可以从该工具包中创建同一midlet的许多对象,但我的计数器仍然只显示1 public class SMS extends MIDlet implements CommandListener { private Display display; private TextFie

我有一个midlet,它有一个静态变量。我需要保留在此变量中创建的所有实例的记录。但它不像静态变量那样工作。我的代码段如下所示。我正在sun wireless toolkit 2.5.5上运行此midlet。我可以从该工具包中创建同一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个对象

MIDlet只实例化一次。有点

MIDP运行时可能不允许您在同一个MIDlet已经运行的时间内启动两次

如果退出MIDlet,计数器将返回0,因为它仍然是RAM中的值,Java虚拟机进程将终止

在某些诺基亚系列40手机上,JVM进程从未终止,因此您可以使用此进程显示自上次开机以来MIDlet的创建次数

静态变量存储在JVM内存中的类对象中。您需要了解类加载(以及J2ME中通常缺乏对类卸载的支持),以确定可以在静态变量中存储什么

我建议移动
counter++
startApp()
,因为每次MIDlet出现在前台时都可以调用它


这还允许您将计数器存储在RMS记录中以提高准确性。

我见过的唯一一个允许静态变量在应用程序的“调用”之间保留的系统是Android。我从未见过在MIDlet调用之间维护静态数据的J2ME设备。但是,MIDlet套件中的MIDlet可以共享静态数据,如上所述,而其中至少有一个正在运行

如果希望在MIDlet调用之间维护数据,则需要使用javax.microedition.rms中的记录存储API,该API提供对持久存储的访问