开发者

Instantiating ObservableList?

I am trying to understand the concept of ObservableList and Realms. I have tried to create an instance of an ObservableList like this:

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

    return myObsList;
  }

But when I call this method I get:

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

I understand that this have something to do we the default realm is not set. But where do I find documentation on these concepts?

I have looked at this:

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开发者_Python百科/databinding/observable/list/ObservableList.html

...but it contains very limited information/examples.

I also have the Eclipse EMF book but cannot find any examples of how to use eg. ObservableList

Where do I find tutorials/documentation on rules/concepts behind Observable?

I have now tried the following:

  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;
  }

...but that does not work since myObsList must be final. Changing it to final makes it impossible to update it inside the run method.

Any suggestions?


A Realm is not set be default. You can test, if a default realm is available:

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

and set a Realm (for the current thread) if necessary:

   Realm.setDefault(new Realm());
}

(JFace Databinding is a challenge...)


You can use the static method

SWTObservables.getRealm(display)

to get the Realm associated with the UI Thread of the given display. It would definitely be nice for the API page of Realm to provide some hint on this.


Hmm, I sympathise, the Eclipse API is a weird one to work with sometimes.

I found this in the JFaces FAQ:

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

It looks like you can run something in a realm using:

Realm.exec(Runnable runnable)

so try creating the observable list from inside the Runnable block. Hope that helps.

See:

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

It would be nice if we had user friendly URL's Eclipse people !


  1. Make your main class to implement Runnable inerface.
  2. Move all logic to run() method
  3. In static main method call Realm.runWithDefault()

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜