2009-06-19 7 views
2

Je voudrais savoir l'endroit approprié pour mettre le code de démarrage séquentiel basé sur GUI dans mon application Blackberry.Où mettre le code de démarrage basé sur l'interface graphique dans une application Blackberry?

In main(), I create MyApp and enterEventDispatcher() 
I have UiApplication (MyApp) 
In the MyApp CTOR: 
- I create a MainScreen (MyMain) 
- I call pushScreen() on MyMain 

Lorsque le répartiteur d'événements commence, est-il un événement que je peux écouter dans mes MainScreen qui me donnera le fil de l'événement où je peux heureusement faire des tâches de démarrage synchrones?

Je peux utiliser invokeLater() mais je souhaite que chaque appel se bloque car leur ordre est important dans cette phase. invokeAndWait() déclenche une exception dans la plupart des cas où j'ai tenté de l'utiliser.

J'ai essayé le code ci-dessous mais je reçois une exception en essayant de courir sur la ligne "Testing 1 2 3".

 
    public class MyApp extends UiApplication { 

     static public void main(String[] args) { 
      new MyApp().enterEventDispatcher(); 
     } 

     public MyApp() 
     { 
      MyView theView = new MyView(); 
      theView.startUpdateTimer(); 
      pushScreen(theView); 

      Dialog.alert("Testing 1 2 3"); 
     } 
    } 

Répondre

1

Si c'est du interface utilisateur assez rapide (création d'un écran, en le poussant sur la pile), faites-le à partir du thread principal avant d'appeler enterEventDispatcher. Vous pouvez réellement faire autant que vous voulez, juste l'expérience utilisateur sera pire si votre application prend beaucoup de temps. Le thread qui appelle enterEventDispatcher devient essentiellement le thread d'envoi d'événement, vous pouvez donc effectuer des tâches d'interface graphique en toute sécurité sur ce thread avant d'appeler enterEventDispatcher. Plus précisément, n'appelez pas invokeAndWait à partir du thread principal - cela entraînera un blocage et probablement une exception.

+0

L'interface utilisateur * fonctionnera-t-elle * avant d'appeler enterEventDispatcher? Est-ce que je peux faire des choses d'interface utilisateur interactives? Par exemple, pour clarifier, disons que je veux demander à l'utilisateur s'il souhaite que la fonctionnalité X soit activée. Puis-je dire Dialog.ask() dans main, obtenir la réponse, faire des ajustements à mes paramètres, le tout avant d'appeler enterEventDispatcher? Sinon, je suppose que je fais juste la queue pour être lancé une fois que le répartiteur démarre. –

+0

J'ai essayé un Dialog.alert() dans main. Comme prévu, je reçois une IllegalStateException. Argh. Je suppose que je pourrais emballer tout mon code de démarrage dans un invokeLater mais j'aimerais savoir si c'est la façon RIM de le faire. –

Questions connexes