2

我想知道在我的黑莓应用程序中放置基于 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() 都会引发异常。

我尝试了下面的代码,但尝试在“Testing 1 2 3”行上运行时出现异常。

    公共类 MyApp 扩展 UiApplication {

        静态公共无效主要(字符串[]参数){
            新的 MyApp().enterEventDispatcher();
        }

        公共我的应用程序()
        {
            MyView theView = new MyView();
            theView.startUpdateTimer();
            推屏(视图);

            Dialog.alert("测试 1 2 3");
        }
    }
4

1 回答 1

1

如果它是非常快速的 UI 内容(创建一个屏幕,将其推送到堆栈上),请在调用 enterEventDispatcher 之前从主线程执行此操作。实际上,您可以随心所欲地做任何事情,只是如果您的应用程序需要很长时间,用户体验会更差。

调用 enterEventDispatcher 的线程基本上变成了事件调度线程,因此在调用 enterEventDispatcher 之前,您可以安全地在该线程上执行任何 GUI 操作。

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

于 2009-06-19T13:56:42.000 回答