我有一个有静态变量的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个对象。
答案 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,它提供对持久存储的访问。