使用JDIC与本机桌面程序交互

来源:互联网 发布:软件工程项目经验 编辑:程序博客网 时间:2024/04/30 10:32

Java在WEB上大放异彩,但在桌面程序开发上可以说逊色太多了。Swing默认的样式难看,速度又慢,而且为了兼容各操作系统,Java很难保证方便地与一些系统专有的程序进行交互,比如Windows中的IE等,而.NET Framework则有很方便的工具可供使用。

对本机程序进行封装,这也是现在软件开发的一大思路,比如傲游(Maxthon)浏览器(原名MyIE2),就是基于IE进行开发的,加了很多功能,现在非常流行。

可以想像,如果用Java实现一个Maxthon,难度是相当大的。

但JDIC的出现,使Java与本机桌面程序交互变得容易了不少。JDesktop Integration Components (JDIC)的目的是构建消除本机应用程序和 Java 等价物之间差距的组件。JDIC 目前提供了本机 Web 浏览器(Internet Explorer 或 Mozilla) 支持、系统托盘支持、文件扩展集成和其他桌面特性。相信JDIC将来在Java桌面开发上会越来越受欢迎。

https://jdic.dev.java.net/
http://www.ibm.com/developerworks/cn/java/j-jdic/
http://community.java.net/javadesktop/

下面以一个基于IE浏览器的小程序来介绍一下JDIC的使用。

程序的需求: 复制一段文字内容到IE浏览器打的网页中的某些表单,即实现自动填写表单的功能。比如我们登录phpeye.com,自动填写用户登录表单。

这个功能也是现在很多浏览器本身就支持的,比如Firefox,就会记录,然后自动完成。当然我们使用程序控制更为强大,易于扩展。这是个简单的功能,但对于某些行业,经常需要在网页上填写大量表单,就非常有用,可以节省大量时间,特别是如果填写的数据也用程序来读取的话:)

解决思路:使用程序打开一个IE窗口,并在窗口中执行一段JavaScript代码,设置表单的值。

使用JDIC,即其中的org.jdesktop.jdic.browser这个package,使用executeScript()方法即可以在当前窗口打开的HTML中执行JavaScript。这里基于jdic.browser的Demo做些简单的改写,就可以满足我们的需求。

首先在浏览器上增加一个“自动完成”按钮,并给该按钮加上事件处理函数。

import org.jdesktop.jdic.browser.*;

webBrowser = new WebBrowser(new URL("http://www.phpeye.com"));

 JButton jCompleteButton = new JButton("自动填写",
            new ImageIcon(getClass().getResource("images/AC.png")));

jCompleteButton.addActionListener(new Browser_jCompleteButton_actionAdapter(this));       

class Browser_jCompleteButton_actionAdapter implements java.awt.event.ActionListener {
    Browser adaptee;

    Browser_jCompleteButton_actionAdapter(Browser adaptee) {
        this.adaptee = adaptee;
    }

    public void actionPerformed(ActionEvent e) {
        adaptee.jCompleteButton_actionPerformed(e);
    }
}

  void jCompleteButton_actionPerformed(ActionEvent e) {
          webBrowser.executeScript("document.getElementById('uname').value='haohappy';document.getElementById('pwd').value='123456';");
    }

上面红色那行就是利用JS来设置表单的内容。

最后结果:

可以在当前页面中执行JavaScript,我们就可以对HTML进行各种各样的操作,实现各种功能。



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1758435


原创粉丝点击