swing嵌入ocx或dll影像控件
2015-12-30 14:25
344 查看
关于swing嵌入ocx或dll影像控件的问题,自己研究了一下,今天发出来给大家共享一下
swing调用OCX或dll的方法有很多,其中包括:jcob、comfyj、jawin、jni、jna等等很多方式,但是如果要显示dll或ocx的控件在swing界面上,就有点麻烦了,就像ocx在IE中显示的<object...>对象一样。
这几种我都实验过,最好用的还是comfyj,但是这个东东最后发现是收费的,而且还不菲~~,如果给客户使用可能存在风险,所以就抛弃了。
然后实验jcob,jcob大家应该都非常熟悉,其实只调用ocx的方法的话,就他就能够满足了,但是如果是ocx或dll视频控件在你的swing程序上显示出来,就非常麻烦了,网上找了很久,也没找到可供参考的资料。最后作罢。
再然后又测试的jawin,最终jawin可以正确展示我的ocx/dll控件视频框,但是好像仅仅支持加载32位动态库,如果是64位的,百度和谷歌了很久也没找到,最后在csdn一个论坛里找了一个加载不报错的,但是不能用~~,郁闷了。
再最后,看到一篇文章,SWT中可以显示word文档,然后心想应该有门,所以又做了测试,并且最终测试成功,现在能在swing上显示32位和64位的动态库或ocx的影像控件了~~~~~~
原理: 用SWT显示控件的视频框,然后将SWT放在swing界面上,然后通过SWT调用封装的dll方法实现交互调用
前提: 用到的OCX或dll必须在系统注册表中已经注册,通过regsvr32 xxxx.dll命令
具体的代码实现,请到我在CSDN上传的资料中下载 http://download.csdn.net/detail/yangyanhe/9383932
swing调用OCX或dll的方法有很多,其中包括:jcob、comfyj、jawin、jni、jna等等很多方式,但是如果要显示dll或ocx的控件在swing界面上,就有点麻烦了,就像ocx在IE中显示的<object...>对象一样。
这几种我都实验过,最好用的还是comfyj,但是这个东东最后发现是收费的,而且还不菲~~,如果给客户使用可能存在风险,所以就抛弃了。
然后实验jcob,jcob大家应该都非常熟悉,其实只调用ocx的方法的话,就他就能够满足了,但是如果是ocx或dll视频控件在你的swing程序上显示出来,就非常麻烦了,网上找了很久,也没找到可供参考的资料。最后作罢。
再然后又测试的jawin,最终jawin可以正确展示我的ocx/dll控件视频框,但是好像仅仅支持加载32位动态库,如果是64位的,百度和谷歌了很久也没找到,最后在csdn一个论坛里找了一个加载不报错的,但是不能用~~,郁闷了。
再最后,看到一篇文章,SWT中可以显示word文档,然后心想应该有门,所以又做了测试,并且最终测试成功,现在能在swing上显示32位和64位的动态库或ocx的影像控件了~~~~~~
原理: 用SWT显示控件的视频框,然后将SWT放在swing界面上,然后通过SWT调用封装的dll方法实现交互调用
前提: 用到的OCX或dll必须在系统注册表中已经注册,通过regsvr32 xxxx.dll命令
/** * 人脸采集控件的SWT图形控件 */ private static Canvas swtCanvas = new Canvas() { private static final long serialVersionUID = 1L; @Override public void addNotify() { super.addNotify(); synchronized (getTreeLock()) { // 另起线程,以免阻塞 new Thread() { public void run() { ...... // swt的初始化 Display display = new Display(); Shell _shell = SWT_AWT.new_Shell(display, swtCanvas); _shell.setLayout(new org.eclipse.swt.layout.RowLayout()); // 加载第一个ocx窗口 OleFrame _frameL = new OleFrame(_shell, SWT.NONE); // tesoClsid : 注册表中已注册的控件PROGID,也就是name OleControlSite _siteL = new OleControlSite(_frameL, SWT.NONE, tesoClsid); _siteL.doVerb(OLE.OLEIVERB_SHOW); _siteL.setSize(400, 300); ...... _shell.pack(); while (!_shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } }.start(); } } }; ...... //然后在swing的jPanel中放入swtCanvas jPanelCapture.add(swtCanvas);
具体的代码实现,请到我在CSDN上传的资料中下载 http://download.csdn.net/detail/yangyanhe/9383932
相关文章推荐
- Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份
- java 学习之路
- linux进程管理
- 改变mysql 数据表编码
- curl
- CI框架整合smarty模板
- CSS让DIV按照背景图片的比例缩放,并让背景图片填充整个DIV
- 软件设计
- MapReduce和YARN是什么关系?
- JS中的事件冒泡——总结
- 饭卡管理系统学生E-R图
- 【OMNet++】tictoc示例三
- present到带有导航栏的viewController,导航栏会消失的问题
- 关于.html()、.val()、.text()区别,IE6中会出现问题
- HTML5本地存储——IndexedDB(一:基本使用)
- windows安装zabbix_agent
- Linux 下不同目录下文件生成动态库.so
- 常用算法回顾——冒泡排序
- springmvc注解开发-高级之异常处理
- php 框架