Blackberry 未捕获异常无应用程序实例

Blackberry 未捕获异常无应用程序实例,blackberry,Blackberry,我正在开发处理多入口点方法的UI应用程序 我是指的,并尝试做一个演示。 代码如下:- 公共类DemoApp扩展UiApplication实现RealtimeClockListener { 私有静态DemoApp-dmMain; 私有静态最终长dm_APP_ID=0x6ef4b845de59ecf9L; 私有静态DemoApp getDemoApp() { 如果(dmMain==null) { RuntimeStore dmAppStore=RuntimeStore.getRuntimeStore

我正在开发处理多入口点方法的UI应用程序

我是指的,并尝试做一个演示。 代码如下:-

公共类DemoApp扩展UiApplication实现RealtimeClockListener
{
私有静态DemoApp-dmMain;
私有静态最终长dm_APP_ID=0x6ef4b845de59ecf9L;
私有静态DemoApp getDemoApp()
{
如果(dmMain==null)
{
RuntimeStore dmAppStore=RuntimeStore.getRuntimeStore();
dmMain=(DemoApp)dmAppStore.get(dm_APP_ID);
}
返回dmMain;
}
私有静态无效setDemoApp(DemoApp demoAppMain)
{
RuntimeStore dmAppStore=RuntimeStore.getRuntimeStore();
dmAppStore.remove(dm_APP_ID);
dmAppStore.put(dm_APP_ID,demoAppMain);
}
公共静态void main(字符串[]args)
{
Log.d(“应用程序参数”+args);
如果(args.length>0&&args[0].equals(“Demo_Alternate”))
{
Log.d(“运行演示###########运行演示#交替”);
dmMain=新的DemoApp();
dmMain.enterEventDispatcher();
setDemoApp(dmMain);
}
其他的
{
Log.d(“Running Demo###########Running Demo###Running Demo”);
getDemoApp().initializeMain();
}
}
公共应用程序()
{
this.addRealtimeClockListener(this);
}
private void initializeMain()
{
UiApplication.getUiApplication().invokeLater(新的Runnable())
{
公开募捐
{
尝试
{
推屏(新的DemoMainScreen());
}捕获(例外e)
{
Log.e(e.toString());
}
}
});
}
已更新的公共文件()
{
showMessage(“DemoAppClock更新”);
Log.d(“DemoAppClock更新#####DemoAppClock更新###DemoAppClock更新”);
}
私有void showMessage(字符串消息)
{
已同步(Application.getEventLock())
{
Dialog dlg=新建对话框(Dialog.D_OK,消息,Dialog.OK,null,Manager.FIELD_HCENTER);
Ui.getUiEngine().pushGlobalScreen(dlg,1,UiEngine.GLOBAL_队列);
}
}
}
:-我已经创建了一个名为Demo\u alternate的备用入口点,该入口点在启动时运行。
●如果应用程序有单独的入口点,则意味着单独的进程

现在我的问题是:

  • 运行代码时,我得到了“未捕获的异常:没有应用程序实例”
  • 我只想创建一个应用程序实例-不需要单独的进程
  • 我们可以使用(应用程序)单例方法作为替代入口点吗
    仅简要查看了此代码,但发现了一个明显的问题:

          dmMain.enterEventDispatcher();
          setDemoApp(dmMain);
    
    enterEventDispatcher永远不会返回,因此您永远不会将应用程序实例放在RuntimeStore中

    我建议您阅读下面的KB文章,您可能会发现它访问RuntimeStore维护的对象的方法更容易使用。或者不是

    更新


    如果此解决方案不起作用,请用更正的代码更新您的原始帖子

    我当然同意Peter的观点,在
    enterEventDispatcher()
    之后调用
    setDemoApp(dmMain)
    意味着它不会被调用

    也就是说,我认为你在这里有一个更基本的误解

    使用备用入口点将创建多个流程。

    但是,你说你不想要分开的过程。你能告诉我们为什么不行吗

    例如,设计为协同工作的单独黑莓进程仍然可以共享数据


    也许你可以告诉我们更多关于你的“演示”和“替代演示”应该做什么。

    。我尝试了这种方法dmMain=new DemoApp();setDemoApp(dmMain);dmMain.enterEventDispatcher()。。得到同样的例外情况。这意味着我们不能使用这种方法。有一个用例,您只需要一个应用程序实例,但也希望它在设备启动时启动——这也是问题中链接到的BB KB文章所暗示的。备用条目不必创建不同的应用程序。例如,它可以只添加侦听器。或者只是将它知道的现有应用程序前景化——我认为这就是这张海报想要做的。也许。。。基于这个问题和Mario的其他问题,我不相信这个用例是他真正想要的。无论如何,我认为对他来说最好是澄清他想做什么。然而,这两个入口点将导致两个单独的进程调用
    main()
    ,对吗?您仍然可以有一个
    Application
    singleton实例,例如,如果他只需要一个Application对象,那么它将保持某种持久状态(并不是说这是实现持久状态的唯一方法)。我只是想了解他想要完成什么。