终于找到在java中调用ie组件的方法了!

      几天以来在网上查资料终于有了成效,现在介绍给大家,希望有所帮助:

Java-COM桥接

由于我们需要使用Web浏览器显示在自己的框架里,所以在本系统中要实现一个Web浏览器。实现Web浏览器的最方便的方法,是使用微软公司的Internet Explore控件。但是,由于Java语言的平台无关性,在Java环境中使用像Internet Explore这样的控件是比较麻烦的,需要复杂的JNIJava本地调用)编程。

为了解决这个问题,通过在世界最大的开放源代码平台http://www.sourceforge.net上的搜索,我们发现,有一个JaWin的项目,就是致力于实现JavaCOM(公共对象模型,Component Object ModelInternet Explore控件就是一种COM控件)的桥接的。但是,该项目不能实现图形界面的自动处理。

幸运的是,通过进一步的搜索,我们发现,一位德国程序员(参考文献[5])在JaWin的基础上发展了一套完整的Java应用程序集成COM的通用方式,并可实现COM组件的可视化,并命名之为NJaWin(New JaWin)

如果我们不太在意程序的跨平台能力并只需要在Windows平台下进行工作的话可以使用NjaWin这种Java-COM桥来实现从Java程序到COM组件的连接。Java-COM桥使用JNI(Java 本地调用)规范与COM接口。

 

 

Java-COM桥使用通用接口将Java应用对COM的请求转发到本地DLL上,再由DLL实现对COM的调用。NJaWin完全实现了通用的Java到COM的调用接口和回调方法,并支持COM Visibility(COM 可视化),从而完全可以实现我们的要求;NJaWin目前是自由软件,比较适合个人和教育等领域的应用。

 

NJaWin的工作流程为:

 

1. 使用JCOMJen.exe对COM控件生成派发接口(dispatch interface)和stub存根。

派发接口负责将Java应用程序对COM的调用转换为对本地动态连接库jawin.dll的相应调用,而stub则为回调方法接口。同时生成的还有代表对应COM对象的一个类(CoClass)。

JCOMJen的参数如下图2所示,对于我们的问题来说,Real Player对应的COM为一个RealAudio控件,一般在Windows安装目录的System32子目录下,文件名为shdocvw.dll;另一个参数为我们Java应用的包(package)名(可选)。

 

 

2. 使用一个AXComponent子类来实现COM接口。

AXComponent实际上是一个Canvas Component,即Java中的AWT画板,为Java的重型(本地)图形组件,拥有GUI的COM将在这个类的实例上渲染图形,我们可以将它放置在任何Java GUI容器(例如JFrame或JPanel)中;在GUI的设计中还需要注意,AWT的重型组件总是在Swing的轻型组件前面渲染,因此不可能在AXComponent上面放置其他的Swing组件。下面是对SHDocVw(Internet控件)的实现片段:

 

public class WebBrowserComponent extends AXComponent {

  public IWebBrowser2 control;

 

  /** 构造函数,在生成此浏览器控件的实例时调用 */

  public WebBrowserComponent(Object parent) throws COMException {

    super(SHDocVw.IWebBrowser2.proxyIID);

  }

 

  public void initInstance() throws COMException {

    control = new IWebBrowser2(getControl());

  }

 

  /* 浏览URL的函数 */

  public void Navigate(java.lang.String URL) throws COMException {

        control.Navigate(URL);

  }

 

    在上面的例子中,包含了一个Navigate函数,该函数可以使用Web浏览器的功能实现对URL访问。

 

这种方法不仅可以用于弥补Java在本地(即Windows操作系统上)的功能不足,更可以快捷方便地利用已有的大量COM组件大大地提高Win32平台下Java程序设计的效率,但不可避免地影响程序的可移植性,研发人员需要在这两者之间进行权衡。

具体例子在njawin中有详细介绍!

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值