Midlet如何调用静态变量?

时间:2009-08-28 03:15:45

标签: java-me midlet

我有一个有静态变量的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个对象。

2 个答案:

答案 0 :(得分:1)

您的MIDlet仅实例化一次。那种。

MIDP运行时可能不允许您在已经运行的情况下启动相同的MIDlet两次。

如果退出MIDlet,计数器将返回0,因为它仍然是in-RAM值,并且Java虚拟机进程已终止。

在某些诺基亚series40手机上,JVM进程永远不会终止,因此您可以使用它来显示自上次手机开机以来MIDlet的创建次数。

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

我建议将counter++;移动到startApp(),因为每当MIDlet被带到前台时都可以调用它。

这也允许您将计数器存储在RMS记录中以获得更高的准确性。

答案 1 :(得分:1)

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

如果要在MIDlet的调用之间维护数据,则需要使用javax.microedition.rms中的Record Store API,它提供对持久存储的访问。