3

我正在尝试从我从备用入口点开始的后台线程中弹出一个全局对话框。

public static void main(String[] args) {
    MyApp theApp = new MyApp();  
    if (args != null && args.length > 0 && args[0].equals("test")) {
        new Thread(new Runnable() {
            public void run() {
                try {
                    synchronized (UiApplication.getEventLock()) {
                        UiEngine ui = Ui.getUiEngine();
                        Screen screen = new Dialog(Dialog.D_OK, "Test", Dialog.OK,
                                                   Bitmap.getPredefinedBitmap(Bitmap.EXCLAMATION),
                                                   Manager.VERTICAL_SCROLL);
                        ui.pushGlobalScreen(screen, 1, UiEngine.GLOBAL_MODAL);
                    }
                } catch (Exception e) {
                    System.out.println(e.toString());
                }
            }
        }).start();
    } else {
        theApp.enterEventDispatcher();
    }
}

我尝试了很多变化来使其工作,但它仍然没有出现。我试过了

同步Application.getEventLock(),我也试过
UiApplication.getUiApplication().invokeLaterUiApplication.getUiApplication().invokeAndWait。我什synchronizing the eventlock至在调用之前先尝试过invokeLater(我认为这是多余的,但我仍然尝试过......)。我不确定我做错了什么。

4

1 回答 1

2

好的,我给你一个示例演示......

首先编辑BlackBerry_App_Descriptor.xml单击Application Tab In ApplicationArgument 写入alternate并选中 Auto Run on start up 单击Alternate Entry Points单击添加并在标题中写入BackgroundApp

制作一个将扩展 Application 类而不是像这样的 UiApplication 类的类

 
导入 net.rim.device.api.system.Alert;
导入 net.rim.device.api.system.Application;
导入 net.rim.device.api.system.Bitmap;
导入 net.rim.device.api.ui.Manager;
导入 net.rim.device.api.ui.Screen;
导入 net.rim.device.api.ui.Ui;
导入 net.rim.device.api.ui.UiEngine;
导入 net.rim.device.api.ui.component.Dialog;


公共类 BackGroundApp 扩展应用程序 {
// 这个类用于后台处理.....

     公共无效 startBackgroundThread()
        {
            新线程(){
                公共无效运行(){
                    而(真){
                        尝试 {
                            线程.sleep(60000);
                        } 捕捉(InterruptedException e){
                            e.printStackTrace();
                        }




                        同步(getEventLock()){

                            //使用这个 UiEngine pushGlobal 对话框

                            //每当应用程序在后台时

                            UiEngine ui = Ui.getUiEngine();
                            Screen screen = new Dialog(Dialog.D_OK, "你有更新!",
                                    对话框.OK,位图
                                            .getPredefinedBitmap(Bitmap.EXCLAMATION),
                                    经理.VERTICAL_SCROLL);
                            ui.pushGlobalScreen(screen, 1, UiEngine.GLOBAL_QUEUE);

                        }
                    }
                }
            }。开始();
        }

}

创建一个将像这样扩展 UiApplication 类的类

公共类 GuiTest 扩展 UiApplication {
    静态定时器 t;

    公共静态无效主要(字符串[]参数){

         if(args.length>0&&"alternate".equals(args[0])){

                            BackGroundApp 应用程序 = 新的 BackGroundApp();
                            app.startBackgroundThread();
                            app.enterEventDispatcher();

            }

         别的{
             GuiTest 测试 = 新 GuiTest();          
             test.enterEventDispatcher();
         }
    }
    公共 GuiTest(){
        Myscreen screeMyscreen = new Myscreen();
        pushScreen(screeMyscreen);
    }

}

现在创建一个 MyScreen 类并在其中添加所有 Ui .... 并按下屏幕

公共类 Myscreen 扩展 MainScreen {



    公共我的屏幕(){
    创建GUI();
    }

    公共无效 CreateGui(){
       // 你的用户界面在这里.......
     }

}

运行示例,您将在一分钟后看到一个对话框,无论您是在应用程序中还是在应用程序之外,屏幕上都会出现一个对话框。谢谢,这可能会有所帮助。

于 2012-07-04T11:26:34.537 回答