黑莓飞溅屏等待问题

时间:2013-09-20 07:05:16

标签: blackberry java-me

我正在尝试启动启动画面几秒钟,然后关闭它并启动第二个屏幕。

出于某种原因,代码在显示启动页面之前执行“睡眠”,并且启动页面仅在几分之一秒内出现,第二个屏幕立即显示。换句话说,当我点击应用程序图标时,它会等待2秒钟,然后显示并立即隐藏启动并跳转到HomeScreen。

我尝试了许多不同的组合,包括invokeAndWait(),回调和Splash类中的线程,但无济于事。

我也在SO上发过很多帖子。

请注意,我不希望启动页面打开下一个屏幕;启动页面(AppStart)的启动器应启动下一个屏幕。

请提出解决方案。

代码:

public class AppStart extends UiApplication 
{
    public static void main(String[] args) {
        AppStart app = new AppStart();
        app.enterEventDispatcher();
    }

    public AppStart() {
        final Splash splashscreen = new Splash();
        UiApplication.getUiApplication().invokeLater(new Runnable() {
            public void run() {
                UiApplication.getUiApplication().pushScreen(splashscreen); 
            }
        });
        Thread waitthread = new Thread()
        {
            public void run()
            {               
                try {
                    sleep(2000);
                } catch (InterruptedException e) {
                }
                finally
                {
                    UiApplication.getUiApplication().invokeLater(new Runnable() {
                        public void run() {
                            UiApplication.getUiApplication().popScreen(splashscreen); 
                        }
                    });
                    UiApplication.getUiApplication().invokeLater(new Runnable() {
                        public void run() {
                            UiApplication.getUiApplication().pushScreen(new HomeScreen()); 
                        }
                    });
                }
            }
        };  
        waitthread.run();
    }

}

飞溅

public class Splash extends MainScreen {
    public Splash()
    {
        Bitmap bgImg = Bitmap.getBitmapResource("480x320-SplashScreen.png");
        Background bg = BackgroundFactory.createBitmapBackground(bgImg);
        getMainManager().setBackground(bg);
    }   
}

1 个答案:

答案 0 :(得分:3)

waitthread.run();

这就是问题所在。你没有开始新的线程,而是通过callyng睡眠它的方法来占用主线程。用这一行替换该行:

waitthread.start();

它应该有用。