管理软件门户

Java

利用Java程序实现网页浏览器

来源:

管理软件门户

发布日期:

2013-03-26 09:07:38

  使用VC,VB 或者C#的开发者们对于在程序里面嵌入一个网页来说,那真是小事一桩。但是在JAVA里面,却几乎是不可能实现的任务。

JEditorPane虽然说可以打开网页,但是它那解析速度以及解析质量,对于今天日益复杂的网页内容来说,就像没有一样。今天我们就使用一个开源的组件(jdic)来实现在JAVA程序里面嵌入网页的效率。

  下面言归正转吧,我们来介绍一下这个开源的组件,它的名字叫 JDI(JDesktopIntegrationComponents),它提供了一种访问桌面组件的API,其中JDK6.0就采纳了其中了一些,比如系统栏图标的SystemTray和 SystemIcon,还有代表桌面的Desktop等等,可见这个API是挺不错的。由于网页浏览器的特殊性,标准的JDK并没有把它加入进来,但是我们一样可以下载它来使用这个功能。明显地,这个功能是用本地方法实现的,所以下载完以后,把 jdic.dll放到我们的path目录中,比如system32文件夹下面,然后我们就可以使用它的功能从而增加我们的JAVA程序了。

  如果你经常访问java.net,或者读过JavaOne的新闻报道,你可能听过 Jdesktop Integration Components(JDIC)。这些新的API终于能让Java开发人员做那些我们曾经羡慕本地同胞们所做的那些事情了。本文将给你一个有关JDIC 特性的全面介绍,每一个特性都带有一个小例子,以及要迈出第一步该下载些什么的一个列表。除了SaverBeans子项目我们要在第二部分介绍外,我们将试验所有的API  JDesktop IntegrationComponents,或JDIC,是一个给Java开发人员提供通过交差平台API存取本地特性的包罗万象的项目。该项目由Sun的Desktop组启动,目的是让Java应用能更好地和它们所运行的桌面环境集成。为了能从开发人员那里得到想要的特性的快速反馈,他们将JDIC做成了开源项目。尽管目前没有计划,但JDIC团队正考虑把JDIC的特征加入Java核心类库的未来版本中去

  JDIC分为五个部分和一个孵化中的项目:

  l 桌面:为了打开、编辑和用email邮寄文件来打开桌面程序;

  l 文件类型:设置桌面文件类型关联;

  l 浏览器:在AWT画布上嵌入本地浏览器(Internet Explorer或者

Mozilla);

  l 包装器:把Java Web Start程序转换成本地安装程序的命令行工

具;

  l 托盘API:支持系统托盘图标和弹出式菜单;

  l SaverBeans:Java中的系统屏幕保护;

  桌面组件

  桌面组件是最简单和可能是最有用的JDIC组件了。它专用于基本的桌面服务,如在正确的编辑器里打开一个文件,新建一封 Email,或者把一个URL发送到默认的web浏览器。构建这些东西需要做很多的工作,但使用起来却非常容易。如果你想告诉操作系统打开一个Word文档,调用Desktop.open(new File(“resume.doc”));就可以了,就这么简单。

  Org.jdesktop.jdic.desktop包只有三个类:Desktop,Message和DesktopException。 Desktop类是静态的不能被实例化。它有几个打开、编辑和打印文件的方法。你也能打开一个新的email和用文本填充它。这就Message使用的地方,它能让你设置接收人,邮件体,附件,和其他部分。

  有关Desktop组件包最好的事就是它用起来是多么地简单。你不需要注册任何特殊的驱动或者修改基于当前平台的配置。这些东西都已经在幕后做好了。只要你的jdic.jar文件在你的类路径中和本地库在你的库路径中(通常你把它和.jar文件放在一起),代码就可以工作了。下边是一个启动一个浏览器的在线例子:

  import org.jdesktop.jdic.desktop.*;

  import java.net.*;

  public class DesktopTest {

  public static void main(String[] args)

  throws Exception {

  Desktop.browse(

  new URL

  }

  }

  文件类型组件

  JDIC的下一个核心组件是文件类型包,它用来设置文件类型关联。这意味着你能告诉操作系统什么文件用什么程序打开,例如总是用Word打开文本文件而不是用写字板打开。用这个API你能查询、设置和删除基于文件扩展名和mime类型的文件类型关联。

  假如那个文件类型通常是某种操作系统上特有的,检索关联或者注册应用本身而不是设置关联时,这个API显得更为有用。例如,在Windows 下,通常的文本文件的关联是调用在众所周知的目录下的notepad.exe。在Gnome下,它可能调用/usr/local/bin/gedit。由于这是和系统相关的,除了把java应用绑定到自己文件的类型,设置关联可能不是非常有用。尽管如此,不管你用它做什么,文件类型组件通过处理注册表和 MIME 类型数据的方式为你处理了所有繁重的工作。

  下边是一个设置文件关联的简短的例子:

  import org.jdesktop.jdic.filetypes.*;

  import java.net.*;

  public class FileTypesTest {

  public static void main(String[] args)

  throws Exception {

  Action action = new Action("open",

  "C:WINDOWSsystem32

  otepad.exe %1");

  Association assoc = new Association();

  assoc.addFileExtension(".mchat");

  assoc.setMimeType("application/mad-chatter");

  assoc.addAction(action);

  AssociationService svc = new AssociationService();

  svc.registerUserAssociation(assoc);

  }

  }

  Main方法的前两行创建了一个将会用notepad.exe打开文件(用%1代替)的Action。之后的四行在action和扩展名为.mchat的文件之间创建了关联。在过去,大多数操作系统专门依赖于文件扩展名或者所有的元数据来确定文件类型。然而在今天,大多数操作系统倾向于为所有文件设置MIME,因此,现在开始使用它是有益的。最后两行实际上是在系统上注册关联。在使用所有的JDIC API时,只要本地库在你的库路径上,让它工作起来你不需要做任何特别的事情。

  浏览器组件

  JDIC的第三个主要组件是浏览器组件。不象前边的两个,它们只是让你存取系统服务,这个组件给你了一个真正在图形应用里使用的 AWT器件。以前,你可以使用第三方的嵌入式组件或纯java的浏览器,但JDIC让你把用户默认的web浏览器嵌入到你的应用中,这些为我们创造了很多机会。现在写一些有全面Web支持的RSS阅读器变成了可能的事情。由于你不必把本地浏览器包含进你的应用中,下载速度也更快了。

  浏览器组件API可以让你访问几个浏览器事件以及在历史记录上的控制(向前,后退,刷新)。未来修订的API版本希望能提供更多存取浏览器和任意装载的文档的功能。

  在你的应用里使用浏览器组件实在是非常容易:

  import org.jdesktop.jdic.browser.*;

  import java.net.*;

  import javax.swing.*;

  public class BrowserTest {

  public static void main(String[] args) throws Exception {

  WebBrowser browser = new WebBrowser();

  browser.setURL(new URL

  JFrame frame = new JFrame("Browser Test");

  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

  frame.getContentPane().add(browser);

  frame.pack();

  frame.setSize(500,500);

  frame.setVisible(true);

  }

  }

  正如你所看到的那样,WebBrowser对象仅仅是一个你可以把它放入一个标准的Jframe中的AWT组件。Main方法的第一行创建了一个新的WebBrowser,第二行设置了你想显示的URL。其他的代码创建了一个frame,把浏览器加入其中,并使得frame可见

  记住WebBrowser是个本地AWT组件,因此你可能陷入与Swing结合的困境。混合它们的两个规则是 1)不要让Swing和AWT组件重叠和 2)在你的菜单上调用setLightWeightPopupEnabled(false)否则它们将消失在浏览器组件后边。

  浏览器组件将立刻使用用户的默认Web浏览器,它们通常是Internet Explorer或Mozilla。你不能象使用Jrex那样把Mozilla的必须的部分和你的应用绑在一起。这种做法可能在Windows上行得通,IE绝对是可以的,但在Linux上有更多的问题,因为它上边的默认浏览器不一定是 Mozilla(例如,在KDE上它可能是Konquorer)。希望这些问题随着项目的成熟能够解决,但目前它对许多项目是很有用的。

  包装器组件

  不象其他的JDIC,包装器模块不是API,而是把JNLP(Java WebStart)应用转换成本地安装程序(Linux上是rpms,Solaris上是pkgs,Windows上是msis)的一组命令行工具。这不是说象 Jsmooth或JexePack那样把你的应用转换成.exe;它仅仅为Web Start应用提供点击安装的功能。在程序安装之后,它将使用JNLP通过Internet更新自己,做Web Start应用能做的所有的其他事情。

  包装器组件需要J2SE5.0和本地工具。对Windows而言,你需要安装Microsoft的MSI SDK。一旦你的环境建立了起来,就能使用命令行工具jnlp2msi,jnlp2rpm,和jnlp2pkg把你的Web Start应用转换成与平台相关的安装程序。

  系统托盘

  托盘图标API曾是一个孵化中项目,但由于java.net社区的勤奋努力,它已经成熟并把它提升到一个完全的JDIC组件的地位。假如你的操作系统有托盘的概念的话,它的目的是在屏幕的右下角创建小程序状态图标。实际上,这种操作系统是指Windows和Linux。Mac OS X用户则没有这个运气。它也支持弹出菜单和为图标提供自动工具提示。象其他JDIC一样,系统托盘支持需要本地代码,但你可以用Java API编码来使用预编译的本地库。

  由于这个API使用范围非常小,所以它们只有两个类: SystemTray和TrayIcon。SystemTray类有一个静态工厂方法用于存取系统的默认托盘。TrayIcon让你把一个 JpopupMenu和Icon添加到系统托盘的下一个可用的位置上。最后,调用 SystemTray.getDefaultSystemTray().addTrayIcon()显示你的弹出菜单。让我们研究一个小例子:

  import org.jdesktop.jdic.tray.*;

  import java.awt.event.*;

  import javax.swing.*;

  public class SystemTrayTest {

  public static JMenuItem quit;

  public SystemTrayTest() {

  JPopupMenu menu = new JPopupMenu("My Menu");

  menu.add(new JMenuItem("Test 1"));

  menu.add(new JMenuItem("Test 2"));

  quit = new JMenuItem("Quit");

  quit.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent evt) {

  System.exit(0);

  }});

  menu.add(quit);

  ImageIcon icon = new ImageIcon("duke.gif");

  TrayIcon tray_icon = new TrayIcon(icon, "System Tray

Test!", menu);

  SystemTray tray = SystemTray.getDefaultSystemTray();

  tray.addTrayIcon(tray_icon);

  }

  public static void main(String[] args) {

  new SystemTrayTest();

  }

  }

  在SystemTrayTest构造函数的前边的几行我们用三个菜单项创建了一个JpopupMenu。最后一个是quit,增加了一个 ActionListener用于退出程序。现在,除了把菜单添加到菜单条上和Jcomponent上外,我们把菜单放进了TrayIcon的构造函数里。显示系统托盘图标的ImageIcon连同工具提示文字也传进了TrayIcon里。最后,我们把TrayIcon添加到默认的SystemTray 上,程序就完成了。把tray.jar和tray.dll分别放到类路径和库路径中(通常是工作路径)。

  TrayAPI也支持动画GIF图标和左键动作。用这个API,你就能让你的应用程序在你需要的时候才显示在任务条上。

  孵化器项目

  从一开始,JDIC设计的目的是积极鼓励和开发新的API。为了方便项目的成长,他们创建了孵化器项目,在那里开发人员可以提交他们的代码和试验他们的想法。如果他们的想法不错并实现成熟,项目就可以提升为一个完全的JDIC模块甚至发展成为一个新的项目。

  SaverBeans SDK

  我过去保留我最喜爱的API。现在,JDIC有一个主要的孵化器项目:一个叫做SaverBeans的创建交差平台屏保的工具包。象其他 JDIC一样,你可以用Java做全部编码,让预建好的本地库处理大量的细节。该项目由处理回调的API,一个用于配置的 xml文件,和一个用平台支持文件产生平台相关屏幕保护可执行程序(在Windows上是.scr,在Unix上是shell脚本)的Ant任务组成。


管理软件门户

    管理软件门户www.glrj.net)是关注软件行业的专业网站,经过多年的飞速发展,已经逐步成长为国内软件行业最专业的门户网站。即能为业界提供软件行业最快速的资讯信息;又能为软件企业提供市场调研分析报告;还能为软件销售人员提供完全免费的软件交易平台。

    目前,管理软件门户(www.glrj.net)不仅获得软件行业内人士的认可,并且获得与软件相关的整个IT业界的认可,众多信息在第一时间被百度、谷歌等所有的搜索引擎收录,不仅每天有众多软件行业内人士在阅读和使用,而且透过合作伙伴每天影响着数万名软件行业用户。

    此外,管理软件门户(www.glrj.net)还在不断完善和提升自身的综合服务能力,并在从市场推广、整体营销策划和公司战略制定等方面为数十家软件企业提供帮助,使他们获得更快的成长,为我国大力扶持国内软件龙头企业战略做出自己积极的贡献!

咨询、合作、推广联系方式

   咨询电话:136 6460 1140       电子邮件:help888@126.com       QQ:27002639

科锐软件哈尔滨管理软件长春管理软件沈阳管理软件 大庆管理软件 阿城管理软件 双城管理软件 齐齐哈尔滨管理软件 牡丹江管理软件
财务管理软件 合同管理软件 奥斯软件 设备管理软件 商品管理软件 采购管理软件 超市管理软件 餐饮管理软件 库存管理软件
版权所有: 管理软件 咨询电话:13664601140 电子邮件:help888@126.com