2009-08-28 4 views
2

У меня есть мидлет, который имеет статическую переменную. Мне нужно сохранить запись всех экземпляров, созданных в этой переменной. но он не работает как статическая переменная. мои сегменты кода выглядят так. Я запускаю этот мидлет на солнцезащитный инструментарий 2.5.5. Я могу создать множество объектов одного и того же мидлет из этого набора инструментов, но все-таки мой счетчик показывает только 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, счетчик возвращается к 0, потому что он по-прежнему является значением в ОЗУ и процесс виртуальной машины Java завершается.

На некоторых телефонах серии Nokia 40 процесс JVM никогда не прерывается, поэтому вы можете использовать это, чтобы показать, сколько раз мидлет был создан с момента последнего включения телефона.

Статические переменные хранятся в объекте Class в JVM-памяти. Вам нужно понять загрузку классов (и обычную нехватку поддержки для разгрузки классов в J2ME), чтобы выяснить, что вы можете хранить в статической переменной.

Я бы предложил переместить counter++; в startApp(), так как это можно было бы вызвать каждый раз, когда MIDlet выведен на передний план.

Это также позволит вам хранить счетчик в записи RMS для дополнительной точности.

1

Единственная система, которую я видел, которая позволяет статическим переменным оставаться между «invocations» приложения, - это Android. Я никогда не видел устройство J2ME, которое поддерживает статические данные между вызовами MIDlet. Однако MIDlet в пакете MIDlet может совместно использовать статические данные, как описано here, хотя по крайней мере один из них запущен.

Если вы хотите сохранить данные между вызовами MIDlet, вам необходимо использовать API-записи Record Store в javax.microedition.rms, которые обеспечивают доступ к постоянному хранилищу.