@MaxLich
java developer

Как можно подключать плагины к приложению на java?

Здравствуйте. Дали тестовое задание. Нужно написать гуишное приложение с возможностью подключать модули (то есть плагины). Причём программа не должна перезапускаться при их подключение (должно всё применяться сразу же). Пока не знаю, как это реализовать.
Кроме того, меня ещё интересует следующее. При подключении плагина будет изменяться главная форма программы, то есть будут появляться какие-то кнопки, поля и прочее. И пока тоже не знаю, как это сделать. Есть мысли копать в сторону repaint(), но пока не уверен (не работал с этим).

ЗЫ Никаких сторонних фреймфорков использовать нельзя, только то, что есть в самой Джаве.
  • Вопрос задан
  • 1315 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Free_ze
Пишу комментарии в комментарии, а не в ответы
Нужно написать гуишное приложение с возможностью подключать модули (то есть плагины). Причём программа не должна перезапускаться при их подключение (должно всё применяться сразу же).

Java по счастливому стечению обстоятельств умеет подгружать классы динамически:
// Где-то там, где реализуется плагин 
class MyClass implements MyPluginInterface {}

// У нас тут, в модульной софтинке
try { 
    Class c = Class.forName("com.vasyapupkin.MyClass"); 
} catch (ClassNotFoundException e) {
    // log error
}

Затем, посредством рефлекшна, вы можете создавать экземпляры вашего типа:

MyPluginInterface plugin = (MyPluginInterface) с.newInstance();


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

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

ЗЫ Можно делать свой велосипед, но такая технология в Java уже существует из коробки - JavaBeans и, если вы хотите препода довести до экстаза, то стоит копать в этом направлении.
Ответ написан
@ivan19631224
Используйте рефлексию.
Ответ написан
Комментировать
@protven
Вообще товарищи немного прифигели, с такими тестовыми заданиями. Посмотрите в сторону OSGI, мы используем эту технологию и в общем-то да, как и декларировалсь, динамическая подгрузка нового кода работает. Но все так там через одно место сделано...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы