2009-08-28 8 views
2

J'ai un midlet qui a une variable statique. Je dois conserver l'enregistrement de toutes les instances créées dans cette variable. mais cela ne fonctionne pas comme une variable statique. mes segments de code ressemblent à ceci. Je cours ce midlet sur la boîte à outils sans fil du soleil 2.5.5. Je peux créer de nombreux objets de même midlet de cette boîte à outils, mais encore mon compteur affiche seulement 1.Comment Midlet peut-il appeler une variable statique?

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); 

chaque fois, le compteur affiche seulement 1 objet créé.

Répondre

1

Votre MIDlet n'est instancié qu'une seule fois. Genre de.

Le runtime MIDP ne vous permettra probablement pas de lancer le même MIDlet deux fois plus longtemps qu'il est déjà en cours d'exécution.

Si vous quittez le MIDlet, le compteur revient à 0 car il s'agit toujours d'une valeur dans RAM et le processus Java Virtual Machine est terminé. Sur certains téléphones Nokia series40, le processus JVM n'est jamais interrompu. Vous pouvez donc l'utiliser pour indiquer le nombre de fois que le MIDlet a été créé depuis la dernière mise sous tension du téléphone.

Les variables statiques sont stockées dans un objet Class dans la mémoire JVM. Vous devez comprendre le chargement des classes (et le manque habituel de prise en charge du déchargement des classes dans J2ME) pour déterminer ce que vous pouvez stocker dans une variable statique.

Je suggère de déplacer counter++; à startApp() car il pourrait être appelé à chaque fois que le MIDlet est mis au premier plan.

Cela vous permettrait également de stocker le compteur dans un enregistrement RMS pour une précision supplémentaire.

1

Le seul système que j'ai vu qui permet aux variables statiques de rester entre les 'invocations' d'une application est Android. Je n'ai jamais vu un appareil J2ME qui maintient des données statiques entre les appels d'un MIDlet. Cependant, les MIDlets au sein d'une suite MIDlet peuvent partager des données statiques, comme décrit here, alors qu'au moins l'un d'entre eux est en cours d'exécution.

Si vous souhaitez conserver des données entre les appels d'un MIDlet, vous devez utiliser les API du magasin d'enregistrements de javax.microedition.rms, qui permettent d'accéder à un magasin persistant.

Questions connexes