Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
blackberry中的上一个实例仍处于活动状态错误_Blackberry - Fatal编程技术网

blackberry中的上一个实例仍处于活动状态错误

blackberry中的上一个实例仍处于活动状态错误,blackberry,Blackberry,我创建了一个应用程序,用户可以从菜单和图标启动。我在我的应用程序中不使用GlobalEventListener,只需注册ApplicationMenuitem。现在我遇到了一个错误:在启动我的应用程序时,上一个实例仍然处于活动状态 复制的步骤并不简单: 从图标启动应用程序 不要关闭它,只需切换到其他应用程序 再次从图标启动应用程序 我在blackberry的论坛上创建了它,但我找不到应该删除我的ApplicationMenuItem的解决方案:它添加在手机开机时,应该一直显示出来 我的代码: p

我创建了一个应用程序,用户可以从菜单和图标启动。我在我的应用程序中不使用GlobalEventListener,只需注册ApplicationMenuitem。现在我遇到了一个错误:在启动我的应用程序时,上一个实例仍然处于活动状态

复制的步骤并不简单:

从图标启动应用程序

不要关闭它,只需切换到其他应用程序

再次从图标启动应用程序

我在blackberry的论坛上创建了它,但我找不到应该删除我的ApplicationMenuItem的解决方案:它添加在手机开机时,应该一直显示出来

我的代码:

public class Jingu extends UiApplication {

public static void main(String[] args) {
    ApplicationManager app = ApplicationManager.getApplicationManager();
    boolean keepGoing = true;
    while (keepGoing) {
        if (app.inStartup()) {
            try {
                Thread.sleep(1000);
            } catch (Exception e) {}
        } else {
            keepGoing = false;
        }
    }

    Jingu theApp = new Jingu();
    theApp.initMenuItem();
    theApp.showMainScreen();
    theApp.enterEventDispatcher();
}

public Jingu() {

}

public void showMainScreen() {
    showScreen(new JinguMainScreen(this));
}

public void initMenuItem() {
    // Create menu item
    Object o = RuntimeStore.getRuntimeStore().get(JinguMenuItem.MY_MENU_ID);
    // register only if not done already.
    if (o == null) {
        new JinguMenuItem(this).registerInstance();
    }
}



public void showScreen(Screen aScreen) {
    synchronized (Application.getEventLock()) {

        try {
            UiApplication.getUiApplication().popScreen(aScreen);
        } catch (Exception e) {
        }

        UiApplication.getUiApplication().pushScreen(aScreen);
    }
}

}

public class JinguMenuItem extends ApplicationMenuItem {
public static final long MY_MENU_ID = 0xb9739d5240d5943dL;
private final Jingu jingu;

public JinguMenuItem(Jingu jingu) {
    super(0x350100);
    this.jingu = jingu;
}

public void registerInstance() {
    Object menuItem = RuntimeStore.getRuntimeStore().remove(MY_MENU_ID);
    if (menuItem == null) {
        ApplicationMenuItemRepository amir =                            ApplicationMenuItemRepository.getInstance();
        amir.addMenuItem(ApplicationMenuItemRepository.MENUITEM_SYSTEM, this);
        RuntimeStore.getRuntimeStore().put(MY_MENU_ID, this);
    }
}


public Object run(Object context) {
    jingu.setDefaultFont(Font.getDefault());
    jingu.setMainApp(false);
    jingu.setBbmEditField(null);

    jingu.showMainScreen();

    return context;
}

public String toString() {
    return "My Menu";
}
}
plz建议我应该在哪里删除应用程序中的ApplicationMenuItem

我的问候


Vadim

如果您正在从应用程序注册Apple MeNuIt,作为一个用户,我会认为您的应用程序删除和退出的方式不好,即使RIM提供了这样做的一种方式。您可能希望将应用程序分为两部分。其中一个为响应ApplicationMenuItem选择提供了最低限度的支持,该选择将自动启动并在后台运行。另一个具有所有其余部分,可以根据需要运行和退出。

我的解决方案是:

创建替代入口点并在应用程序加载时运行 在其中注册菜单 不要使用runtimeStore
因此,我应该让一个应用程序实例始终在后台运行?这是一种方法,但不是我建议的。作为对第2步的评论:我发现切换应用程序实际上会在默认情况下关闭你的应用程序,因此它基本上与点击“关闭”相同,这也只是关闭屏幕,从而调用onClose。您需要覆盖screen类的onClose,将其发送到后台。