Я пытаюсь заставить мое приложение Blackberry отображать пользовательское модальное диалоговое окно, и заставляет начальную ветку ждать, пока пользователь не закроет диалоговое окно.
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.