2010-11-15 35 views
0

ok alors je suis cette configuration: un midletJ2ME MIDlet double fil n'a pas callback

Gui extends Midlet{ 
     private static Gui instance; 

     protected void startApp() { 
      Display.getDisplay(this).setCurrent(MyForm.getInstance()); 
     } 

      private static final Logger log = LoggerFactory.getLogger(); 

     public static Datacheck getInstance() { 
      return instance; 
     } 

     public Gui() { 
      // Configure logging 
     } 

     protected void startApp() { 
      instance = this; 
      Display.getDisplay(this).setCurrent(MyForm.getInstance()); 
     } 

     protected void pauseApp() { 
     } 

     protected void destroyApp(boolean bool) { 
      // Shutdown Microlog gracefully 
      LoggerFactory.shutdown(); 
      notifyDestroyed(); 
     } 

     public static void log(Level level, String message) { 
      log.log(level, message); 
     } 

     public void requestScreen(Form screen) { 
      log.info("request screen called"); 
      Display.getDisplay(this).setCurrent(screen); 
     } 
    } 

une forme

MyForm extends Form{ 
     private static MyForm instance; 

     public static MyForm getInstance() { 
      if (instance == null) { 
       instance = new MyForm(); 
      } 
      return instance; 
     } 

     private Form(){ 
      //start task 
      new Timer().scheduleAtFixedRate(new PollingService(CallsDialog.getInstance()), 0, UPDATE_INTERVAL); 

      //add gui elements .... 
     } 

     private void updateForm() { 
      //never gets executed 
     } 
    } 

et un fil

MyThread implements Runnable{ 
     private MyForm handle; 

     public PollingService(MyForm handle) { 
      this.handle = handle; 
     } 

     public void run() { 
      handle.updateForm(); 
     } 
    } 

de sorte que le midlet commence , définit sa forme sur une instance de MyForm puis myform crée un nouveau thread ce fil doit appeler une fonction du myform toutes les 5 secondes

ceci est un exemple fortement simplifié de la chose réelle alors s'il vous plaît, ne changez pas la conception de fil

maintenant quand j'exécute une méthode de la " MyForm " je ne reçois aucune erreur

modifier changé donc il n'y a pas de fil créé (déjà fait par TimerTask)

+0

essayez de mettre SOP et impression stacktrace dans la capture, essayez de débogage, le code semble OK. –

Répondre

1

1) Vous n'avez pas besoin de créer thread séparé pour exécuter TimerTask. Le mécanisme TimerTimerTask contient déjà la création d'un nouveau thread pour chaque exécution de TimerTask.

2) Pourriez-vous fournir un code qui a plus de réalité? Il n'y a pas de création MyThread dans votre exemple, ni d'appel à start(). Parfois, un bug manque juste l'appel de la méthode.

+0

thx pour la réponse, le problème était que le UpdateForm ressemblait à ceci: updateGui (element, checkIfSoundNotifyIsNeeded()); maintenant le checkIFSoundNotifyIsNeeded donne une exception (nullpointer), je serai en mesure de réparer le reste :), stange que vous n'obtenez aucune erreur si: s – Berty