Java BlackBerry-线程没有响应

Java BlackBerry-线程没有响应,java,multithreading,blackberry,invoke,invokelater,Java,Multithreading,Blackberry,Invoke,Invokelater,很抱歉,这个问题有点模糊,但我无法从调试中获得任何有用的信息 我有一个使用new thread()调用的线程。开始时,它将运行一小段时间,我收到以下消息: 未捕获异常:应用程序“我的应用程序” 名称(201)”没有响应;过程 终止 现在令人沮丧的是,我能够运行相同的进程,但没有线程,线程会锁定我的应用程序,但我可以从我的Eclipse控制台看到,它可以正常工作。因此,我知道它们与我在线程上使用的函数无关 我想问题可能在于我使用“InvokeLater”函数来更新我的GUI线程进程,我很难做到这一

很抱歉,这个问题有点模糊,但我无法从调试中获得任何有用的信息

我有一个使用new thread()调用的线程。开始时,它将运行一小段时间,我收到以下消息:

未捕获异常:应用程序“我的应用程序” 名称(201)”没有响应;过程 终止

现在令人沮丧的是,我能够运行相同的进程,但没有线程,线程会锁定我的应用程序,但我可以从我的Eclipse控制台看到,它可以正常工作。因此,我知道它们与我在线程上使用的函数无关

我想问题可能在于我使用“InvokeLater”函数来更新我的GUI线程进程,我很难做到这一点,我担心它会破坏我的线程

有什么建议吗

为了扩展我的帖子,这个问题是因为我从另一个线程调用了很多代码:-

 invokeLater(new Runnable() 
        {
            public void run() 
            {
                _output.setText(_output.getText() + "\n" + msg);
            }
        });
这正在建立一个队列,很快使我的应用程序崩溃

我对该选项的解决方案是通过将以下代码添加到我的函数中来使用事件线程:-

   synchronized(Application.getEventLock()) {
       _output.setText("new text " + System.currentTimeMillis());
   }

如果您在执行耗时的操作时在线程中的某个对象上进行同步,并且如果您的UI线程尝试在同一对象上进行同步,它将一直阻止,直到释放锁。

您完全正确:

我想问题可能在于我使用“InvokeLater”函数来更新我的GUI线程进程,我很难做到这一点,我担心它会破坏我的线程

调用InvokeLater会立即返回,并为UI线程执行队列。问题是,如果队列太大,操作系统将杀死你的应用程序,假设UI已经陷入困境,无法为队列提供服务

我过去用来解决这个问题的解决方案是将发送到UI线程的工作分块。制作某种累加器对象、布尔标志和锁。然后工作线程抓住锁并向累加器添加工作。布尔标志指示UI工作代码是否计划在将来清空累加器。如果没有,请计划UI更新代码


在UI更新代码中,您抓取锁并尽快将数据移出累加器,并将布尔值标记为false,以表明不再有计划清空累加器的UI工作程序。

这可能是死锁,特别是如果您延长超时时间后仍能看到它。您可以进行线程转储,然后查看UI线程正在做什么。如果它正在等待获取锁,您可能希望朝这个方向挖掘。

您可能希望发布一些代码来显示线程的功能。您确定使用的是invokeLater()而不是invokeAndWait()?我以前在使用autocomplete时就遇到过这种情况。我也同意NGAC,有些代码会非常有用。根据您的编辑,我想指出您的原始代码是二次代码,而替换代码是线性的,因此您无法在性能上比较它们。感谢您,这似乎是个问题,我现在将着手处理您的建议。