【发布时间】:2014-06-27 18:29:39
【问题描述】:
我正在处理的使用 BlackBerry SDK 6 的项目报告了一个错误,在该错误中,当关闭 MainScreen 导致应用程序突然失去焦点并停止响应时,控制台输出报告的消息为 foreground app ******* lost focus it has no screens。让我澄清一下,即使应用程序上的屏幕仍然可见但应用程序以某种方式失去焦点,也会显示此消息。
我无法确定触发此错误的条件,我尝试以打开许多 MainScreen 然后按返回按钮关闭它们的情况为例。当我触发这个错误时,我会尝试用更清晰的输出进行更新。
在每个 MainScreen 上,onClose 方法被重写以调用 ScreenManager 类中的一个方法,我们创建一个类来处理 MainScreens 的打开和关闭,它的代码如下所示:
public void back()
{
if(pageStack.size() - 1 == 0) {
// if only one screen is in our stack collection, show a prompt asking if user wants to close app
int choose=Dialog.ask(Dialog.D_YES_NO, ui.getRb().getString(ui.EXIT_YES_NO));
if(choose==Dialog.YES)
{
System.exit(0);
}
} else {
// in case our stack of screens has more than one screen remaining then pop it for our stack
popPageStack();
}
}
popPageStack 的代码是这样的:
private void popPageStack() {
pageStack.removeElementAt(pageStack.size()-1);
UiApplication.getUiApplication().popScreen(UiApplication.getUiApplication().getActiveScreen());
}
是否有可能是在 popScreen 调用期间造成这种情况的原因?我刚刚开始在 BlackBerry 上进行开发,所以我不知道是否会发生 popScreen 调用以及在渲染弹出之前的屏幕时是否可能出现 no screen on app 的情况?
编辑
我制作了一个带有菜单项的测试项目,当单击该菜单项时,会删除正在显示的唯一屏幕,之后我之前描述的行为发生了。确实,不知何故,我的屏幕快用完了,最后一个显示的屏幕仍然“显示”,但由于它已经弹出,因此无法进行交互。
我正在检查我的原始项目,但我不明白当我使用返回按钮返回时如何触发 onClose 调用。无论如何,如果我要到达最后一个窗口,那么应该会弹出一个对话框,询问应用程序是否应该关闭。
编辑 2
尽管经过几次尝试,我还是能够重现该错误两次。我得到的控制台输出是这样的:
[0.0] JVM:bklt @12347710:setTimer 30 [0.0] UIE:焦点 - 目标丢失, 上一页=null,输入=null,app=com.yallaya.rbt.Main@9b0462e2 [0.0] UIE: 前台应用程序 com.yallaya.rbt.Main@9b0462e2 失去焦点,因为它有 没有屏幕。 [0.0] UIE:焦点 - 目标丢失,prev=null,input=null, app=com.yallaya.rbt.Main@9b0462e2 [0.0] UIE:前台应用 com.yallaya.rbt.Main@9b0462e2 失去焦点,因为它没有屏幕。 [0.0] UIE:前台应用 com.yallaya.rbt.Main@9b0462e2 没有 屏幕。这应该得到纠正。 [0.0] UIE:前台应用 com.yallaya.rbt.Main@9b0462e2 忽略触摸屏触摸/点击,因为 它没有[0.0] 目标屏幕。 [0.0] JVM:bklt @12377703:计时器 [0.0] JVM: bklt[1] @12377703: usrIdle 27, usrTime 30, usrAct 1 [0.0] JVM: bklt[1] @12377703:chkIdle 29,currTime 30 [0.0] JVM:bklt @12377703: setTimer 3 [0.0] JVM:bklt @12380734:计时器 [0.0] JVM:bklt[1] @12380734:usrIdle 30,usrTime 30,usrAct 1 [0.0] JVM:bklt[1] @12380734:chkIdle 33,currTime 30 [0.0] JVM:bklt[1] @12380734: enableBacklight 0 [0.0] JVM:bklt[1]:setTimeout 30 [0.0] JVM:bklt[1] @12386796:JBSC on=0 [0.0] JVM:bklt[1] @12386796:SC 0 [0.0] JVM: bklt[1]:setTimeout 30 [0.0] JVM:bklt[1] @12388023:JBSC on=1 [0.0] JVM:bklt[1] @12388023:SC 1 [0.0] JVM:bklt @12388023:setTimer 30
每次我尝试与屏幕交互(触摸或硬件输入)时,都会显示[0.0] UIE: Foreground app com.yallaya.rbt.Main@9b0462e2 has no screens. This should be corrected. 行。
这是否暗示了我的问题在哪里?
【问题讨论】:
-
在 BB 论坛上提出了类似的问题:supportforums.blackberry.com/t5/Java-Development/…
标签: blackberry blackberry-eclipse-plugin blackberry-jde