2009-06-19 42 views
2

我想知道在我的黑莓应用程序中放置基于GUI的顺序启动代码的适当位置。将基于GUI的启动代码放在黑莓应用程序中的位置?

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 

当事件调度开始,有没有我可以听在我MainScreen,这将使我在事件线程在那里我可以高兴地做到同步启动任务的事件?

我可以使用invokeLater(),但我希望每个调用都要阻塞,因为它们的顺序在这个阶段很重要。在我尝试使用它的大多数情况下,invokeAndWait()会引发异常。

我试过下面的代码,但是当我试图运行在“测试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"); 
     } 
    } 

回答

1

如果这是相当快的UI的东西(创建屏幕,将其推入堆栈),从调用enterEventDispatcher前主线程做。实际上,您可以尽可能多地完成任务,如果您的应用需要很长时间,则用户体验会更差。

调用enterEventDispatcher的线程基本上成为事件调度线程,所以在调用enterEventDispatcher之前,您可以安全地在该线程上执行任何GUI工作。

具体来说,不要从主线程调用invokeAndWait - 这会导致死锁,并可能是一个异常。

+0

在调用enterEventDispatcher之前,UI *会工作吗?即我可以做交互式UI事物吗? 例如,为了澄清,让我们假设我想询问用户他们是否想要启用功能X.我可以说主要的Dialog.ask(),得到响应,调整我的设置,所有之前调用enterEventDispatcher?否则,我想我只是在调度员启动后才将它们排队等候。 – 2009-06-19 16:09:43

相关问题