最开始你会看到这个不友好的警告,一个很严重的java异常:
运行java版demo遇到的问题一:Unable to load library 'HCNetSDK': ÕҲ»µ½ָ¶¨
Exception in thread “main” java.lang.UnsatisfiedLinkError: Unable to load library ‘HCNetSDK’: ÕҲ»µ½ָ¶¨
解析问题一:不难看出来,无法去加载库文件HCNetSDK.dll
。这时你分析一下这个报错的代码提示,可以看出来定位到ClientDemo.java
这个类的第66行,那肯定是找不到HCNetSDK
接口里提供的HCNetSDK
的实例。再向上看定位分析,找不到HCNetSDK.dll
的路径,定位到第36行。遇到报错不要怕,重要的是学会分析问题所在并去解决掉,领导也喜欢善于解决问题的。
运行java版demo遇到的问题二:Unable to load library 'PlayCtrl': ÕҲ»µ½ָ¶¨
Exception in thread “main” java.lang.UnsatisfiedLinkError: Unable to load library ‘PlayCtrl’: ÕҲ»µ½ָ¶¨
解析问题二:不难看出来,无法去加载库文件PlayCtrl.dll
。这时你分析一下这个报错的代码提示,可以看出来定位到ClientDemo.java
这个类的第67行,那肯定是找不到PlayCtrl
接口里提供的PlayCtrl
的实例。再向上看定位分析,找不到PlayCtrl.dll
的路径,定位到第3069行。遇到报错不要怕,重要的是学会分析问题所在并去解决掉,领导也喜欢善于解决问题的。
解析完问题后,我们了解到无法加载HCNetSDK.dll、PlayCtrl.dll
这个两个库文件,下面给出解决方案:我采用的是编写工具类GetDLLPath()
方法来解决找不到路径的问题。
代码如下:
//获取DLL文件路径
public class GetDLLPath {
//路径
public static String DLL_PATH;
static{
//通过getPath方法去拿路径
String path = GetDLLPath.class.getResource(“/”).getPath()
.replaceAll(“20%”, " ").substring(1);
// 这个是解决打包找不到路径的写法,但是目前引入demo运行用不上,我就注释掉了
// String[] ph = path.split(“/”);
// StringBuilder sb = new StringBuilder();
// for(int i= 0;i < ph.length-2;i++){
// sb.append(“/”).append(ph[i]);
// }
// //解决打包加载类找不到路径的问题,这里编写你自己存放的路径
// sb.append(“/src/main/resource/sdk”);
// path = sb.toString();
try {
//设置编码为UTF-8,这样设置转码会出一个问题,一旦遇到+号这种就会转成空格
DLL_PATH = java.net.URLDecoder.decode(path,“utf-8”);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
//测试
}
}
上面的工具类写好后,就可以修改HCNetSDK.java
类,我给出原始文档写法和改良后的写法。修改HCNetSDK
对象,引入GetDLLPath
工具类,下面的代码给出解决方案:
建议多手动敲代码,不要一味的复制粘贴。不然你会生疏的,除非是达到了一定的技术后,可以偷偷懒也是可以的嘛,当然这是玩笑话,活跃下气氛。
//原始写法
// HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(“HCNetSDK”,
// HCNetSDK.class);
//改完后的写法:通过GetDLLPath工具类去找dll绝对路径
HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary(GetDLLPath.DLL_PATH
- “HCNetSDK.dll”,HCNetSDK.class);
//原始写法
// PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(“PlayCtrl”,
// PlayCtrl.class);
//改良后写法:通过GetDLLPath工具类去找dll绝对路径
PlayCtrl INSTANCE = (PlayCtrl) Native.loadLibrary(GetDL
必看视频!获取2024年最新Java开发全套学习资料 备注Java
LPath.DLL_PATH
+“PlayCtrl.dll”,PlayCtrl.class);
做完以上步骤后,终于可以运行起来了。demo
起飞,开启征程。工欲善其事,必先利其器。
当然这是官方文档基于java
的swing
写出的demo
。如果项目需要引入,基本是用web
开发的模式,网上找一找海康web3.0
也是可行的。当然你自己写个出来,也是可行的,最终你还是要在自己的项目中编写接口拿到数据。
其实不难发现,最重要的就是HCNetSDK
这个接口里面提供的类容。比如定义了一些常量和全局错误代码可供快速查询,具体还是看你需要用到那一部分。下面截取部分代码:
最后点击注册时遇到了报错提示,可以使用hCNetSDK.NET_DVR_GetLastError()
方法,获取错误code
码,在HCNetSDK
类中有提示。
System.out.println(hCNetSDK.NET_DVR_GetLastError());
注册失败,通过错误code码定位原因。
定位错误可以参考官方给出的PDF帮助文档
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
[外链图片转存中…(img-ZM3VzyRZ-1716356673368)]