【问题标题】:Instantiating ObservableList?实例化 ObservableList?
【发布时间】:2011-01-20 12:30:22
【问题描述】:

我试图理解ObservableListRealms 的概念。我试图像这样创建ObservableList 的实例:

  public ObservableList createObservableList() {
    ObservableList myObsList = new ObservableList(new ArrayList<String>(),
        "test") {
    };

    return myObsList;
  }

但是当我调用这个方法时,我得到:

org.eclipse.core.runtime.AssertionFailedException: null argument:Realm cannot be null
 at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:85)

我知道这与我们未设置默认领域有关。但是我在哪里可以找到关于这些概念的文档?

我看过这个:

http://wiki.eclipse.org/JFace_Data_Binding/Observable

http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/databinding/observable/list/ObservableList.html

...但它包含的信息/示例非常有限。

我也有 Eclipse EMF 书,但找不到任何使用示例,例如。 ObservableList

在哪里可以找到有关 Observable 背后的规则/概念的教程/文档?

我现在尝试了以下方法:

  public static ObservableList createObservableList() {
    ObservableList myObsList = null;
    Realm.getDefault().exec(new Runnable() {
      @Override
      public void run() {
        myObsList = new ObservableList(new ArrayList<String>(), "test") {
        };
      }
    });
    return myObsList;
  }

...但这不起作用,因为myObsList 必须是最终的。将其更改为 final 将无法在 run 方法中对其进行更新。

有什么建议吗?

【问题讨论】:

    标签: java eclipse observable eclipse-databinding


    【解决方案1】:

    领域未设置为默认值。如果有可用的默认领域,您可以测试:

    if (Realm.getDefault() == null) {
    

    如有必要,设置一个领域(用于当前线程):

       Realm.setDefault(new Realm());
    }
    

    (JFace 数据绑定是一个挑战...)

    【讨论】:

    • 似乎 API 已更改。 Realm.setDefault 不再可见。
    【解决方案2】:

    你可以使用静态方法

    SWTObservables.getRealm(display)
    

    获取与给定显示的 UI 线程关联的领域。如果 Realm 的 API 页面对此提供一些提示,那肯定会很好。

    【讨论】:

      【解决方案3】:

      嗯,我很同情,Eclipse API 有时使用起来很奇怪。

      我在 JFaces 常见问题解答中找到了这个:

      http://wiki.eclipse.org/JFace_Data_Binding_FAQ#What_is_a_Realm.2C_and_do_I_need_to_care.3F

      看起来您可以使用以下方法在领域中运行某些东西:

      Realm.exec(Runnable runnable)
      

      所以尝试从 Runnable 块内部创建可观察列表。希望对您有所帮助。

      见:

      http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/databinding/observable/Realm.html

      如果我们有用户友好的 URL 的 Eclipse 人员,那就太好了!

      【讨论】:

      • 您可以将URLs 隐藏在简短易读的名称后面,可以在问题、答案甚至 cmets 中使用;-)
      • 好的,目前还没有出版的书籍像 EMF 书籍及其对生态建模的报道那样深入介绍 ObservableList?
      • 当然,但是让 Eclipse 显示用户友好的 URL 仍然很好
      • Eclipse API 似乎在相当多的变化中,我认为没有一本书可以捕捉到它。一个包含解决方案和示例的 wiki 会很棒,我不明白他们如何有效地“测试”他们的 API——当然,根据使用来记录它是最好的方法。
      【解决方案4】:
      1. 让您的主类实现可运行接口。
      2. 将所有逻辑移至run()方法
      3. 在静态main方法中调用Realm.runWithDefault()

        Main main = new Main();  
        Realm realm = SWTObservables.getRealm(Display.getDefault());  
        //for JFace data binding  
        Realm.runWithDefault(realm, main);
        

      【讨论】:

        猜你喜欢
        • 2018-10-10
        • 2016-04-20
        • 1970-01-01
        • 1970-01-01
        • 2013-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-13
        相关资源
        最近更新 更多