2009-12-03 2 views
1

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

Любая идея? Как решить эту проблему?

+0

Не могли бы вы предоставить дополнительную информацию о «аварии»? Например. трассировка стека исключений? Это может быть проблема с экспортом и импортом пакетов в файлы OSIFI MANIFEST. –

ответ

1

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

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

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

public interface UIExtensionService { 

    Control createExtension(Composite parent); 

} 

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^