Создание ObservableList? - PullRequest
       21

Создание ObservableList?

4 голосов
/ 20 января 2011

Я пытаюсь понять концепцию ObservableList и 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 ]

2 голосов
/ 02 января 2012

Вы можете использовать статический метод

SWTObservables.getRealm(display)

, чтобы получить область, связанную с потоком пользовательского интерфейса данного дисплея. Было бы неплохо, чтобы страница API Realm давала подсказку по этому вопросу.

2 голосов
/ 20 января 2011

Область не установлена ​​по умолчанию.Вы можете проверить, доступна ли область по умолчанию:

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

и установить область (для текущего потока), если необходимо:

   Realm.setDefault(new Realm());
}

(JFace Databinding является проблемой..)

1 голос
/ 13 июля 2015
  1. Сделайте ваш основной класс для реализации Runnable inerface.
  2. Переместить всю логику в run() метод
  3. При статическом вызове основного метода Realm.runWithDefault()

    Main main = new Main();  
    Realm realm = SWTObservables.getRealm(Display.getDefault());  
    //for JFace data binding  
    Realm.runWithDefault(realm, main);
    
1 голос
/ 20 января 2011

Хм, я сочувствую, Eclipse API - это странный инструмент, с которым иногда приходится работать.

Я нашел это в FAQ 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

Было бы неплохо, если бы у нас были Eclipse люди с удобным URL!

...