我创建了一个涉及两种类型用户登录的应用程序。 登录后,应用程序应加载相应的UI。我搜索了 在互联网上寻求解决方案,包括使用反射 包。但是要么加载一个主类,然后调用一个 方法,否则加载所有类。我有这两种类型的代码 用户在两个不同的包中,目前我用这些包运行应用程序 已经在工作目录中的包(即在一个项目下) 名)
最后的逻辑是:我有三个罐子。
main.jar
由登录ui组成。在验证应用程序的密码后
应加载admin.jar
或tchr.jar
我正在使用javafx,我想使用相同的“场景”对象
修改。我使用BorderPane
,其顶部为Menubar
,居中为
登录。 admin.jar
和tchr.jar都使用GridPane
登录后我打算
(假设用户是管理员)BorderPane设置其中心
来自GridPane
admin.jar
它非常类似于IDE使用其插件的方式,在下载之后在Eclipse中使用 特殊插件ide自动识别可用 插件并相应地修改ui
答案 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;
}
}