Как Мидлет может вызывать статическую переменную? - PullRequest
2 голосов
/ 28 августа 2009

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

Ответы [ 2 ]

1 голос
/ 03 ноября 2009

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

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

1 голос
/ 28 августа 2009

Ваш мидлет создается только один раз. Вид.

Среда выполнения MIDP, вероятно, не позволит вам запустить один и тот же мидлет вдвое дольше, чем он уже запущен.

Если вы выходите из мидлета, счетчик возвращается к 0, поскольку он все еще находится в оперативной памяти и процесс виртуальной машины Java завершается.

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

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

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

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

...