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进行各种各样的操作,实现各种功能。