OSGI + SWT: как разбить View (GUI) на множество пакетов - PullRequest
1 голос
/ 03 декабря 2009

Я пишу графическое приложение с Java, SWT и OSGI. Пакет A содержит главное окно приложения. В зависимости от выбора пользователя должен быть загружен другой пользовательский интерфейс. То есть разные GUI находятся в разных комплектах. Таким образом, основной пакет A вызывает пакет B для создания нового графического интерфейса. Пакет B содержит много классов, элементов управления SWT, которые расширяют класс Composite. Для этого элемента управления нужен родительский элемент. Проблема здесь в том, что пакет B должен опираться на пакет A. Я пытался отправить родительский композит, который будет содержать новый интерфейс, из A в B, но когда B создает новый элемент управления, он падает.

Есть идеи? Как решить эту проблему?

1 Ответ

1 голос
/ 14 января 2010

Звучит так, будто вы пытаетесь настроить сложную систему взаимозависимости, которая работает не очень хорошо.

Вам известно о шаблоне доски? Вы можете прочитать больше здесь: http://www.osgi.org/wiki/uploads/Links/whiteboard.pdf

Итак, основываясь на этом шаблоне, скажем, A - это ваш «основной» пакет, который загружает основной интерфейс. Для простоты, скажем, пакет A также экспортирует следующий интерфейс:

public interface UIExtensionService {

    Control createExtension(Composite parent);

}

Пакет B (и C, D, E, F и т. Д.) Затем регистрирует соответствующие реализации этого интерфейса. Вы можете использовать свойства при регистрации службы, чтобы помочь вашему основному пакету, например, сузить конкретную реализацию, если вы хотите показать что-то конкретное на основе заданного пользователем ввода.

Bundle A затем использует BundleContext для поиска подходящей реализации UIExtensionService и вызывает метод createExtension, передавая родительский объект, который вы хотите использовать.

Надеюсь, это поможет.

...