黑莓应用程序挂起并冻结UI修改

时间:2009-10-05 19:53:37

标签: multithreading user-interface blackberry thread-safety

我在Blackberry JDE上编写了一个Blackberry应用程序,在9000模拟器上运行。我在大约一周前测试了它并将它加载到Blackberry 9000手机上,一切正常。然而,从那时到现在的某个时候,出了点问题。

我的代码执行整个移动箭头“从互联网上加载东西”或任何东西,但没有弹出屏幕。我的原始屏幕只是一个带有RichTextField的主屏幕,根本不加载。至少这个屏幕很可能在过去的一周内没有改变,所以如果有什么东西坏了,它将会出现在后面的一段代码中,甚至不应该进入!

我的.jad或.cod文件是否有可能以某种方式损坏?我注意到当我第一次将代码放在我的机器上时,我只是插入Eclipse提供给我的.cod文件中。然后,上周,它给我的.cod文件没有用,因为它实际上是一个zip文件,里面有两个.cod文件。使用与.cod文件同名的.cod文件,他们成功加载了我的应用程序。我这次做了同样的事情,我没有得到无效的鳕鱼文件错误或任何东西,但应用程序仍然是破碎的。

我应该看一些方向吗?这个问题可能出现在我的代码,鳕鱼文件,电话或其他地方吗?

-Jenny

编辑:我已经将其缩小到仅在我尝试加载特定屏幕时才会出现的问题。我的问题是这个屏幕几乎与另一个在实际设备上运行良好的屏幕相同。这两个屏幕都是从相同的方法生成的(它进行Web服务调用并返回XML并解析它以填充屏幕的字段)。唯一的区别是,正在破坏的屏幕将转到不同的URL。这个URL可以工作(来自浏览器和模拟设备),所以我很茫然。应用程序似乎没有崩溃,(它仍然在后台运行),它只是不会尝试显示了。

编辑:

好的,我在加载应用程序后立即看到一些隧道错误(但在我执行任何网络代码之前)。当我执行我的网络代码时,它工作正常,除非它恰好是我的“租赁”部分。我注释了所有调用,并使我的租赁菜单项只是做一个打印声明。代码行为相同(它冻结,或在选择按钮后显示白屏)。所有其他菜单项都有效(包括调用线程或网络方法的菜单项)。租赁菜单在模拟器中成功执行。

            private MenuItem _rentals = new MenuItem("My Rentals", 110,
                    10) {
                public void run() {
                    //if the last thing I did was a rental
                    //just show the screen
                    //else, reload rentals
                    System.out.println("Rentals was selected");
                    displayError("Rentals was pressed");

//                  if(rental){
//                      System.out.println("It's a rental!");
//                      popScreen(getActiveScreen());
//                      pushScreen(_offeringsScreen);
//                  }else{
//                      System.out.println("Getting Rentals from scratch");
//                      RentalsThread _rThread = new RentalsThread();
//                      _rThread.start();                               
//                  }

                }};

我在这里完全失败:设备调试器似乎甚至没有注册我选择菜单项,而不是执行一行代码!它冻结了!我会尝试在我的程序开始时放回我的RentalsThread调用(这也是冻结)只是为了看看我是否可以通过租赁线程(这使得租赁屏幕)来解决问题,以及租赁的问题菜单项。

2 个答案:

答案 0 :(得分:2)

好的,我想我已经弄明白了。

1。)我的代码在评论完所有内容之后仍然表现相同,因为我没有重建.COD文件(如果你试图在模拟器中运行它们会自动重建,但是当你生成时却不会重建一个.ALX文件,出于某种原因)。

2。)我生成租借屏幕的代码是在屏幕上添加内容。显然,这在模拟器上一切都很好,但在真实设备上,你需要在事件线程中进行所有图形操作(即使是尚未显示的图形)(我使用了invokeAndWait)。

所以,现在一切似乎都运转得很好。我的网络没有任何问题(我认为也没有,因为我的其他网络屏幕工作得很好)。在我开始之前,我仍然不知道为什么我会得到所有那些奇怪的隧道网络的东西,但它似乎还没有影响任何东西。

另见:
BlackBerry UI Threading - The Very Basics
BlackBerry threading model

答案 1 :(得分:0)

几点建议:

  • 如果您对文件IO或网络等资源有一些后台工作,应用程序可能会卡在那里...提供错误处理并尝试从设备调试应用程序!
  • 代码签名,检查需要签名的API的最新代码更新。但由于没有错误,这是值得怀疑的。

要在设备上进行调试,请运行Blackberry Device Manager,将手机连接到usb,在eclipse选择项目中,上下文菜单 - >调试为 - >黑莓设备。
A50 How to Debug and Optimize

UPDATE 我看到“隧道失败”异常,所以就像网络连接问题...
tunnel failed in blackberry bold. why?
How to Configure Full Internet Access On BlackBerry

更新 Support - Application stops responding when opening a connection

相关问题