Использование OSGi для подключения JMenuItems к GUI - PullRequest
0 голосов
/ 28 ноября 2011

Я создал приложение и теперь хочу, чтобы он был готов к плагину. Я решил использовать Apache Felix, и после прочтения учебника я не уверен, что это был выбор, который я хотел.

Я хочу изменить свое приложение, чтобы оно загружалось в начале Bundles из папки / plugins и добавляло каждый Bundle как JMenuItem в JMenu. Я мог бы сделать это с помощью ClassLoader, но я думал, что OSGi был именно тем, что я хотел, но потом я столкнулся с некоторыми проблемами:

  • есть командная строка для OSGi, но мне нужно, чтобы она была реализована в моем приложении, без какого-либо взаимодействия с пользователем, жестко закодировала его поведение по умолчанию в коде.

  • есть поведение Bundle (start() и stop() методы, унаследованные от org.osgi.framework.BundleActivator), которые Bundle вызывает в начале, но я на самом деле хочу, чтобы мое приложение делало что-то с Bundle, а не Пакет, чтобы сделать что-то с приложением.

Итак, не могли бы вы сказать мне, возможно ли сделать это с помощью OSGi (и т. Д. Apache Felix) или я должен реализовать его с помощью ClassLoader, а затем явно преобразовать основной класс плагина .jar в JMenuItem и добавить его в мой JMenu ( это хуже, потому что он не поддерживает динамическое изменение приложения и не дает мне возможности изучать OSGi).

РЕДАКТИРОВАТЬ: Я думаю о чем-то вроде: http://karussell.wordpress.com/2009/09/16/plugable-swing-a-hello-world-osgi-example/, но я не могу найти учебник.

1 Ответ

3 голосов
/ 28 ноября 2011

Зачем вам создавать пункт меню для каждого пакета, который существует в представлении?Это на самом деле не имеет смысла.

Вы / можете / сделать это, создав приложение с графическим интерфейсом, а затем в методе start () сохранить контекст и затем использовать его для запроса списка всех пакетов всистема.Возможно, вы захотите сделать это по требованию, когда будет показано ваше меню (чтобы вы могли видеть текущий список).

Однако вы действительно думаете не в том направлении.То, что вы хотите сделать, это искать / услуги /.Когда сервис входит, вы используете его для заполнения пункта меню.Таким образом, вы можете иметь несколько сервисов в каждом пакете, и сервисы могут иметь некоторую форму взаимодействия.

Нил Бартлетт и я поговорили именно об этом подходе для приложения на основе Swing (хотя и с использованием зарегистрированных объектов Action),Демонстрация и презентация по-прежнему доступны по этому адресу:

http://www.eclipsezone.com/files/jsig/

Обратите внимание, что это было сделано во время OSGi v4, поэтому вы можете обнаружить, что установка не удалась с несовпадающей версиейструктура импорта.Если это так, взломайте файл и убедитесь, что он не говорит Import-Package: org.osgi.framework;version="[1.3.0,1.4.0)" или что-то подобное - избавьтесь от номеров версий, и он все равно должен работать сегодня.

...