我試圖讓我的黑莓應用程序顯示一個自定義的模式對話框,並讓開啓線程等待,直到用戶關閉對話框屏幕。在事件線程上拋出的「由非事件線程調用的pushModalScreen」
final Screen dialog = new FullScreen();
...// Fields are added to dialog
Application.getApplication().invokeAndWait(new Runnable()
{
public void run()
{
Application.getUiApplication().pushModalScreen(dialog);
}
});
這是拋出一個異常,它說「pushModalScreen由非事件線程被稱爲」儘管我使用invokeAndWait從事件線程中調用pushModalScreen。
關於真正問題是什麼的任何想法?
這裏是複製此問題的代碼:
package com.test;
import net.rim.device.api.ui.*;
import net.rim.device.api.ui.component.*;
import net.rim.device.api.ui.container.*;
public class Application extends UiApplication {
public static void main(String[] args)
{
new Application();
}
private Application()
{
new Thread()
{
public void run()
{
Application.this.enterEventDispatcher();
}
}.start();
final Screen dialog = new FullScreen();
final ButtonField closeButton = new ButtonField("Close Dialog");
closeButton.setChangeListener(new FieldChangeListener()
{
public void fieldChanged(Field field, int context)
{
Application.getUiApplication().popScreen(dialog);
}
});
dialog.add(closeButton);
Application.getApplication().invokeAndWait(new Runnable()
{
public void run()
{
try
{
Application.getUiApplication().pushModalScreen(dialog);
}
catch (Exception e)
{
// To see the Exception in the debugger
throw new RuntimeException(e.getMessage());
}
}
});
System.exit(0);
}
}
我使用的組件包版本4.5.0。
這是一個UIApplication的或後臺應用程序? – 2010-03-26 17:29:13
您是否在某些系統監聽器(例如PhoneListener或SendListener)中使用此應用程序? – 2010-03-26 17:39:14
這是一個UI應用程序。我已經添加了演示項目的代碼,以說明問題。 – JGWeissman 2010-03-26 18:04:31