JDIC 中利用WebBrowser内置浏览器到java application中

来源:互联网 发布:tf家族官网淘宝 编辑:程序博客网 时间:2024/05/01 21:50

JDIC简介:

JDesktop Integration Components (JDIC),是一个开源的项目,目的是构建消除本机应用程序和 Java 等价物之间差距的组件。项目组长是个中国人。该项目是为了使用java建立桌面应用程序而建立的JDIC 单一的 Java API 允许应用程序接进本机操作系统特性,同时保持跨平台支持。

  它目前提供了本机 Web 浏览器(Internet Explorer 或 Mozilla) 支持、系统托盘支持、文件扩展集成、应用程序启动与打印和其他桌面特性。
  配置:
  开始下载跨平台(或windows/linux/solaris)JDIC 包,其中包括:
  1.jdic.jar:这个 JAR 文件包含进行 JDIC 开发所需的所有 Java 类。它们必须位于类路径中,以便进行编译。
  2.jdic.dll 和 tray.dll:在 Windows 安装中,这些文件都要放在 C:\Windows 目录(或者对应的目录)中。这些文件包含 jdic.jar 的 Java 方法和本机操作系统方法之间的"桥接"方法。
  3.libjdic.so 和 libtray.so:在 Solaris 和 Linux 系统上,这些文件必须放在 LD_LIBRARY_PATH 文件夹中

JDIC 中的第一个组件WebBrowser

JDIC 项目中的第一个组件(也是该项目的最初灵感) 是 WebBrowser,它提供了一条接近操作系统内置浏览器的途径。任何熟悉 Swing 的人都非常清楚,在 Java 应用程序中查看 Web 页面很困难。例如,现有的 Swing 组件 JEditorPane 就做得很糟糕,只能显示最简单的 Web 页面。如果包含任何 DHTML 脚本,那么请忘记它 —— 现有的 Swing 组件不能显示它。这让 Swing 开发人员失去了在应用程序中显示 HTML 页面的选择 —— 由于 Web 在任何桌面应用程序中都是如此之重要(用作帮助页面和 README 文件),所以这是一个很大的障碍。

特别打击 Swing 开发人员的一个事实是:现在每台机器上都有功能齐全的浏览器,但它们的应用程序仍然无法使用。每个本机应用程序都能使用内置的浏览器(Windows 上的 Internet Explorer 或 Linux 机器上的 Mozilla)。Swing 的功能与易于访问的解决方案之间的巨大差距促使 WebBrowser 成为 JDIC 项目的一个好起点。

WebBrowser 允许 Swing 应用程序将本机浏览器嵌入任何应用程序中。但是需要重点指出的是,WebBrowser 仅仅 是 Web 浏览器应用程序的呈现部分。这个组件不包含 Back 按钮、地址栏、状态栏,或者任何不属于应用程序呈现部分的内容。但是,正如稍后将看到的,WebBrowser 包含了允许您实现这些常用的浏览器特性的方法。


用jdic开源组件,这种方式有个缺点,不支持firefox,如果把默认浏览器设为firefox就会出错

JDIC浏览器组件的使用方法(将网页在swing界面上显示):
1、  将jdic.jar导入类路径;
2、  将jdic.dll, IeEmbed.exe拷贝到操作系统的system32目录下;
3、  生成java代码。

例子:利用jdic中的WebBrowser来调用本地html来嵌入百度地图

MainFrame.java源文件

import java.io.File;import java.net.URL;import javax.swing.JFrame;import org.jdesktop.jdic.browser.BrowserEngineManager;import org.jdesktop.jdic.browser.IBrowserEngine;import org.jdesktop.jdic.browser.IWebBrowser;import org.jdesktop.jdic.browser.WebBrowser;import org.jdesktop.jdic.browser.WebBrowserEvent;import org.jdesktop.jdic.browser.WebBrowserListener;public class MainFrame {public static IWebBrowser browser;    public MainFrame() {    }        public static void main(String[] args) throws Exception{        BrowserEngineManager bem = BrowserEngineManager.instance();        bem.setActiveEngine(BrowserEngineManager.IE);        IBrowserEngine be = bem.getActiveEngine();                //URL url = new URL("http://www.hao123.com");        URL url = new File("D:/test.htm").toURI().toURL();           //WebBrowser browser1 = new WebBrowser();        browser = be.getWebBrowser();//new WebBrowser();        browser.addWebBrowserListener(new WebBrowserListener() {            public void downloadStarted(WebBrowserEvent event) {             System.out.println("27");                        }            public void downloadCompleted(WebBrowserEvent event) {            System.out.println("30");            }            public void downloadProgress(WebBrowserEvent event) {            System.out.println("33");            }            public void downloadError(WebBrowserEvent event) {            System.out.println("36");            }            public void documentCompleted(WebBrowserEvent event) {                System.out.println("39");                browser.executeScript("alert('文档下载完毕!')");            }            public void titleChange(WebBrowserEvent event) {            System.out.println("43");            }            public void statusTextChange(WebBrowserEvent event) {            System.out.println("46");            }            public void windowClose(WebBrowserEvent webBrowserEvent) {            System.out.println("49");            }public void initializationCompleted(WebBrowserEvent arg0) {System.out.println("52");} });        browser.setURL(url);        JFrame f = new JFrame();        f.setTitle("浏览器");        f.setSize(800,600);        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        //f.getContentPane().add(browser1);        f.getContentPane().add(browser.asComponent());        f.setVisible(true);    }    }


test.htm文件:
<!DOCTYPE html><html><head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    <title>酸奶小妹——百度地图API学习</title>    <style type="text/css">        html{height:100%}        body{height:100%;margin:0px;padding:0px}        #milkMap{height:400px;width:600px;border:1px solid blue;}    </style>    <script type="text/javascript" src="http://api.map.baidu.com/api?v=1.1&services=false"></script></head><body>    <div id="milkMap"></div></body><script type="text/javascript">    var map = new BMap.Map("milkMap");          // 创建地图实例    var point = new BMap.Point(116.404, 39.915);  // 创建点坐标    map.centerAndZoom(point, 18);                 // 初始化地图,设置中心点坐标和地图级别        map.setMapType(BMAP_PERSPECTIVE_MAP);     //修改地图类型为3D地图    map.setCurrentCity("北京市");  //设置当前城市    </script></html>


注:利用jdic中的WebBrowser中的executeScript()方法可在当前窗口打开的HTML中执行JavaScript,如利用JS来设置表单的内容

webBrowser.executeScript("document.getElementById('uname').value='haohappy';document.getElementById('pwd').value='123456';");}