2017-02-07 4 views
-5

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

Заключительная логика такова: я есть три банки.

  1. main.jar
  2. admin.jar
  3. tchr.jar

main.jar состоит из входа в пользовательский интерфейс. после проверки паролей приложение следует загружать либо admin.jar или tchr.jar

Im с помощью JavaFX, и я хочу использовать один и тот же «Scene» объект для модификации. Я использовал BorderPane с верхним номером Menubar и центром как логин. Оба admin.jar и tchr.jar использовать GridPane После входа в систему я намерен , что (предположим, что пользователь является администратором) BorderPane устанавливает свой центр в GridPane от admin.jar

Сво подобно как IDE использует плагины, В Eclipse после загрузки конкретный плагин ide автоматически распознает доступные плагины и соответственно изменяет ui

+3

Check [это] (/ помощь/mcve), прежде чем просить –

ответ

-1

ЕСЛИ это коммерческий и промышленный проект. Я рекомендую использовать OSGI в качестве решения динамических модулей. В противном случае вам следует более подробно рассмотреть Reflection & Загрузка класса Java для создания собственного облегченного решения.

Чтобы динамически загружать пользовательский интерфейс, вы должны использовать FXMLLoader. Храните GridPanes в качестве fxmls в динамическом банке, а затем использовать аналогичный код ниже, чтобы загрузить их во время выполнения:

public static Node loadResource(URL resource, Object controller){ 
    final FXMLLoader loader = new FXMLLoader(resource); 
    if (controller!=null) loader.setController(controller); 
    try { 
     Node node = loader.load(); 
     log.debug("resource {} loaded", resource); 
     return node; 
    } catch (IOException e) { 
     log.error("could not load resource {}",resource, ExUtils.getRootCause(e)); 
     return null; 
    } 
} 
+0

спасибо, его личный проект, я не 't хочу использовать FXML, и может u plz дать некоторые хорошие ссылки для java размышления tutorial – pebble

+0

@NumaNuma См. [Как загружать банки динамически во время выполнения] (http://stackoverflow.com/questions/60764/how-should- I-нагрузка-банка-динамически на-выполнение) – rvit34