如何在运行时加载包

时间:2017-02-07 15:48:16

标签: java javafx

我创建了一个涉及两种类型用户登录的应用程序。 登录后,应用程序应加载相应的UI。我搜索了 在互联网上寻求解决方案,包括使用反射 包。但是要么加载一个主类,然后调用一个 方法,否则加载所有类。我有这两种类型的代码 用户在两个不同的包中,目前我用这些包运行应用程序 已经在工作目录中的包(即在一个项目下) 名)

最后的逻辑是:我有三个罐子。

  1. main.jar
  2. admin.jar
  3. tchr.jar
  4. main.jar由登录ui组成。在验证应用程序的密码后 应加载admin.jartchr.jar

    我正在使用javafx,我想使用相同的“场景”对象 修改。我使用BorderPane,其顶部为Menubar,居中为 登录。 admin.jar和tchr.jar都使用GridPane登录后我打算 (假设用户是管理员)BorderPane设置其中心 来自GridPane

    admin.jar

    它非常类似于IDE使用其插件的方式,在下载之后在Eclipse中使用 特殊插件ide自动识别可用 插件并相应地修改ui

1 个答案:

答案 0 :(得分:-1)

如果这是一个纪念性和工业项目,我建议您使用OSGI作为动态模块解决方案。否则,您应该仔细查看Reflection& Java类加载,以构建您自己的精简解决方案。

要动态加载UI,您应该使用FXMLLoader。将您的GridPanes存储为动态jar中的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;
    }
}