Java串口监听需要动态加载自定义位置的系统资源库文件的办法

我的需求是

我的软件自带了jre,不用客户装java

有些客户装了java 也能用

但是我的读取串口的功能,需要加载一个放在 系统资源库里的文件

所以这里

我就要 设定资源库路径(串口功能的包只能放在系统库里才能用)

java 一旦运行能否动态再加载自定义的资源库路径呢?

可以

 

/**
* 动态加载系统资源库路径
*
* @param libraryPath
* @throws Exception
*/
private static void addLibraryDir(String libraryPath) throws Exception {
Field userPathsField = ClassLoader.class.getDeclaredField("usr_paths");
userPathsField.setAccessible(true);
String[] paths = (String[]) userPathsField.get(null);

StringBuilder sb = new StringBuilder();
for (int i = 0; i < paths.length; i++) {
if (libraryPath.equals(paths[i])) {
continue;
}
sb.append(paths[i]).append(':');//mac 是 : Windows是;
}
sb.append(libraryPath);
System.setProperty("java.library.path", sb.toString());
final Field sysPathsField = ClassLoader.class.getDeclaredField("sys_paths");
sysPathsField.setAccessible(true);
sysPathsField.set(null, null);
}

 

用以上的方法,

在main入口调用一下,

try {
addLibraryDir(System.getProperty("user.dir") + "/SystemLib");
} catch (Exception ex) {
Logger.getLogger(main.class.getName()).log(Level.SEVERE, null, ex);
}

 

就可以达到目的

我是mac 如果是win 的分割符号修改一下即可。

 

posted @ 2020-10-09 07:15  jerryguorui  阅读(182)  评论(0)    收藏  举报
Email: Ceo@rui8.app