【问题标题】:Blackberry - LabelField Dynamic Update IssuesBlackberry - LabelField 动态更新问题
【发布时间】:2011-02-08 15:16:02
【问题描述】:

我正在尝试为 Storm2 开发一个 BlackBerry 应用程序。我在尝试从应用的不同实例更新 LabelField 时遇到问题。

程序在不更新此 LabelField 的情况下运行良好,但是当我尝试添加代码以更新文本时,它在“settext”行之后变得无响应。

我错过了什么吗?

public class AgentTrackerScreen extends MainScreen
{
    public static LabelField _outputText;
    ...
}

public class BtService implements Runnable
{
    ...
    public void run() 
    {
        AgentTrackerScreen._outputtext.settext(
            "Something: " + btListener.vecDevices.size());
    }
    ...
}

【问题讨论】:

  • 尝试将run() 方法中的代码分成两行(第一行创建字符串,第二行使用settext 中的字符串)来查看问题出在settext 还是与btListener.vecDevices.size().
  • 我已经试过了。 btListener.vecDevices.size() 工作正常;我认为 settext 是有问题的。

标签: blackberry


【解决方案1】:

您必须在事件线程上进行所有用户界面修改,否则在执行之前锁定用户界面。详情请见BlackBerry UI Threading Basics

(顺便说一句,这是许多用户界面系统中的常见要求。Java SE 中的 Swing 有这个要求。Windows 上的 WPF 也是如此。)

【讨论】:

    【解决方案2】:

    使用任一:

    • invokeAndWait(Runnable r)
    • invokeLater(Runnable r)
    • 在 UiApplication.getEventLock() 上同步

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多