博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
动态加载jar并执行其内方法
阅读量:7048 次
发布时间:2019-06-28

本文共 1533 字,大约阅读时间需要 5 分钟。

  hot3.png

前一段时间被要求写一个视图工具用来处理常用的功能。

最终选了使用Swing来开发。

程序开发完突然想到一个问题,如果每次要增加一个小功能,是不是都得在源代码上增加代码,然后打包?

后来就想着增加一个按钮,来导入新的功能。而关注点,只需要开发新的功能,即可。

实现如下:

1、一个通用的JPanel接口

// 抽象类public abstract class AbstractCustomPanel {       // 初始化内容面板(即新增功能的视图面板)      public abstract  CustomPanel initContainer();}// 实体类public abstract class CustomPanel extends JPanel {       // 获取类的类名称      public abstract  String getPackageName();}

所有的功能小工具的视图都继承 AbstractCustomPanel(也可以写成接口)

面板容器继承 CustomPanel

2、实现一个小功能

public class NotifyInit extends AbstractCustomPanel {      public CustomPanel initContainer() {           return new NotifyPanel();      }}// 功能视图public class NotifyInit extends AbstractCustomPanel {      public NotifyPanel() {           // TODO 实现视图效果      }      public NotifyPanel getPackageName() {           return this.getClass().getName();      }}

3、将上面的小功能打包成jar包(不是可执行的jar包)

4、主程序动态加载此工具类

     主菜单加上此工具按钮(我新增了一个导入对话框,内有功能名称,功能包名(实现抽象类的类包名称),功能jar路径(此处应该是一个文件选择对话框),动态加载按钮)

JToggleButton button = new JToggleButoon("功能名称");// jar 文件保存在classes的plugins文件夹内URL url = Thread.currentThread().getContextClassLoader().getResouce("resources/jar名称").toURI().toURL();URLClassLoader classLoader= new URLClassLoader(new URL[] { url }, Thread.currentThread().getContextClassLoader()); Class
clazz = classLoader.loadClass("packageName");AbstractCustonPanel custom = clazz.newInstance();// 得到功能工具的视图面板CustomPanel panel = custom.initContainer();String packageName = panel.getPackageName();// 加载到主面板,或作其他操作

4.2

转载于:https://my.oschina.net/asddsa/blog/1563630

你可能感兴趣的文章
Java 引用类型变量和基本类型变量做参数时的区别
查看>>
各种查看TCP连接的命令
查看>>
实现web系统的权限控制
查看>>
android项目小模块
查看>>
我的友情链接
查看>>
js 实现日历效果
查看>>
我的友情链接
查看>>
Go笔记-Go命令
查看>>
Redis设计与实现笔记
查看>>
rip汇总前后路由区别
查看>>
一致性Hash算法
查看>>
nmon
查看>>
×××全新升级以提升用户体验
查看>>
js 创建类
查看>>
调整实例恢复时间
查看>>
shell中$0,$?,$!等的特殊用法
查看>>
蓝牙协议栈代码分析
查看>>
我的友情链接
查看>>
几款常用幻灯片制作软件对比
查看>>
Java 代理模式和装饰者模式的区别
查看>>