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 的分割符号修改一下即可。
浙公网安备 33010602011771号