正如理查德在他的回答中提到的那样,您遇到了问题,因为您试图从主(又名“UI”)线程以外的线程操作 UI。您只需要稍作改动即可使您的代码正常工作:
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
pushScreen(new MyScreen());
}
},
200 /* delay */,
false /* repeat = no */);
以上是您发布的 BlackBerry Java 代码的等价物。
我的目标是推动 SplashScreen 10 秒,然后 MyScreen 页面将打开。所以我想在打开 MyScreen 页面时使用计时器延迟 10 秒,在计时器期间我将显示 SplashScreen 页面。
如果这实际上是您想要做的,那么只需SplashScreen
在应用程序启动后立即出现:
public class MyApp extends UiApplication
{
/**
* Entry point for application
* @param args Command line arguments (not used)
*/
public static void main(String[] args)
{
// Create a new instance of the application and make the currently
// running thread the application's event dispatch thread.
MyApp theApp = new MyApp();
theApp.enterEventDispatcher();
}
public MyApp()
{
// Push a screen onto the UI stack for rendering.
final SplashScreen splashScreen = new SplashScreen();
pushScreen(splashScreen);
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
pushScreen(new MyScreen());
popScreen(splashScreen);
}
},
10*1000 /* delay in msec */,
false /* repeat = no */);
}
这可以满足您的要求,但 Richard 提供的链接还允许用户提前关闭初始屏幕。这可能是也可能不是你想要的,所以我只是提供上面的替代方案。