【问题标题】:How to load a package at runtime如何在运行时加载包
【发布时间】:2017-06-24 22:47:41
【问题描述】:

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

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

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

main.jar 包含登录用户界面。验证密码后应用程序 应该加载admin.jartchr.jar

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

它很像 IDE 如何使用它的插件,在 Eclipse 中下载一个 ide 自动识别可用的特定插件 插件并相应地修改用户界面

【问题讨论】:

  • 询问前检查this

标签: java javafx


【解决方案1】:

如果它是一个商业和工业项目,我建议您使用OSGI 作为动态模块解决方案。否则,您应该仔细查看反射和 Java 类加载以构建您自己的 lite 解决方案。

要动态加载 UI,您应该使用 FXMLLoader。将您的 GridPanes 作为 fxmls 存储在您的动态 jar 中,然后使用下面的类似代码在运行时加载它们:

    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;
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-11
  • 1970-01-01
  • 2011-02-27
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-18
相关资源
最近更新 更多