2

Blackberry アプリで 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" 行で実行しようとすると例外が発生します。

    public class MyApp extends UiApplication {

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

        パブリック MyApp()
        {
            MyView theView = new MyView();
            theView.startUpdateTimer();
            pushScreen(theView);

            Dialog.alert("テスト 1 2 3");
        }
    }
4

1 に答える 1

1

非常に迅速な UI 処理 (画面の作成、スタックへのプッシュ) の場合は、enterEventDispatcher を呼び出す前にメイン スレッドから実行します。アプリに時間がかかると、ユーザー エクスペリエンスが低下するだけです。

enterEventDispatcher を呼び出すスレッドは、基本的にイベント ディスパッチ スレッドになるため、enterEventDispatcher を呼び出す前にそのスレッドで GUI 操作を行っても安全です。

具体的には、メイン スレッドから invokeAndWait を呼び出さないでください。デッドロックが発生し、おそらく例外が発生します。

于 2009-06-19T13:56:42.000 に答える