4

我试图理解ObservableListand的概念Realms。我试图创建一个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 方法中对其进行更新。

有什么建议么?

4

4 回答 4

2

您可以使用静态方法

SWTObservables.getRealm(display)

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

于 2012-01-02T14:45:59.197 回答
2

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

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

并在必要时设置一个领域(用于当前线程):

   Realm.setDefault(new Realm());
}

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

于 2011-01-20T12:41:26.743 回答
1

嗯,我很同情,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 人员,那就太好了!

于 2011-01-20T12:42:17.733 回答
1
  1. 让你的主类实现 Runnable 接口。
  2. 将所有逻辑移至run()方法
  3. 在静态主方法调用中Realm.runWithDefault()

    Main main = new Main();  
    Realm realm = SWTObservables.getRealm(Display.getDefault());  
    //for JFace data binding  
    Realm.runWithDefault(realm, main);
    
于 2015-07-13T13:04:59.560 回答