利用Java实现网页浏览器的方法_第1页
利用Java实现网页浏览器的方法_第2页
利用Java实现网页浏览器的方法_第3页
利用Java实现网页浏览器的方法_第4页
利用Java实现网页浏览器的方法_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

利用Java实现网页浏览器的方法使用VC,VB或者C#的开发者们对于在程序里面嵌入一个网页来说,那真是小事一桩。但是在JAVA里面,却几乎是不可能实现的任务。JEditorPane虽然说可以打开网页,但是它那解析速度以及解析质量,对于今天日益复杂的网页内容来说,就像没有一样。今天我们就使用一个开源的组件(jdic)来实现在JAVA程序里面嵌入网页的效率。下面言归正转吧,我们来介绍一下这个开源的组件,它的名字叫JDIC(JDesktopIntegrationComponents),网址为:/,它提供了一种访问桌面组件的API,其中JDK6.0就采纳了其中了一些,比如系统栏图标的SystemTray和SystemIcon,还有代表桌面的Desktop等等,可见这个API是挺不错的。由于网页浏览器的特殊性,标准的JDK并没有把它加入进来,但是我们一样可以下载它来使用这个功能。明显地,这个功能是用本地方法实现的,所以下载完以后,把jdic.dll放到我们的path目录中,比如system32文件夹下面,然后我们就可以使用它的功能从而增加我们的JAVA程序了。如果你经常访问,或者读过JavaOne的新闻报道,你可能听过JdesktopIntegrationComponents(JDIC)。这些新的API终于能让Java开发人员做那些我们曾经羡慕本地同胞们所做的那些事情了。本文将给你一个有关JDIC特性的全面介绍,每一个特性都带有一个小例子,以及要迈出第一步该下载些什么的一个列表。除了SaverBeans子项目我们要在第二部分介绍外,我们将试验所有的APIJDesktopIntegrationComponents,或JDIC,是一个给Java开发人员提供通过交差平台API存取本地特性的包罗万象的项目。该项目由Sun的Desktop组启动,目的是让Java应用能更好地和它们所运行的桌面环境集成。为了能从开发人员那里得到想要的特性的快速反馈,他们将JDIC做成了开源项目。尽管目前没有计划,但JDIC团队正考虑把JDIC的特征加入Java核心类库的未来版本中去JDIC分为五个部分和一个孵化中的项目:l桌面:为了打开、编辑和用email邮寄文件来打开桌面程序;l文件类型:设置桌面文件类型关联;l浏览器:在AWT画布上嵌入本地浏览器(InternetExplorer或者Mozilla);l包装器:把JavaWebStart程序转换成本地安装程序的命令行工具;l托盘API:支持系统托盘图标和弹出式菜单;lSaverBeans:Java中的系统屏幕保护;桌面组件桌面组件是最简单和可能是最有用的JDIC组件了。它专用于基本的桌面服务,如在正确的编辑器里打开一个文件,新建一封Email,或者把一个URL发送到默认的web浏览器。构建这些东西需要做很多的工作,但使用起来却非常容易。如果你想告诉操作系统打开一个Word文档,调用Desktop.open(newFile(“resume.doc”));就可以了,就这么简单。Org.jdesktop.jdic.desktop包只有三个类:Desktop,Message和DesktopException。Desktop类是静态的不能被实例化。它有几个打开、编辑和打印文件的方法。你也能打开一个新的email和用文本填充它。这就是Message使用的地方,它能让你设置接收人,邮件体,附件,和其他部分。有关Desktop组件包最好的事就是它用起来是多么地简单。你不需要注册任何特殊的驱动或者修改基于当前平台的配置。这些东西都已经在幕后做好了。只要你的jdic.jar文件在你的类路径中和本地库在你的库路径中(通常你把它和.jar文件放在一起),代码就可以工作了。下边是一个启动一个浏览器的在线例子:以下是代码片段:

importorg.jdesktop.jdic.desktop.*;

import.*;

publicclassDesktopTest{

publicstaticvoidmain(String[]args)

throwsException{

Desktop.browse(

newURL("/")

);

}

}文件类型组件JDIC的下一个核心组件是文件类型包,它用来设置文件类型关联。这意味着你能告诉操作系统什么文件用什么程序打开,例如总是用Word打开文本文件而不是用写字板打开。用这个API你能查询、设置和删除基于文件扩展名和mime类型的文件类型关联。假如那个文件类型通常是某种操作系统上特有的,检索关联或者注册应用本身而不是设置关联时,这个API显得更为有用。例如,在Windows下,通常的文本文件的关联是调用在众所周知的目录下的notepad.exe。在Gnome下,它可能调用/usr/local/bin/gedit。由于这是和系统相关的,除了把java应用绑定到自己文件的类型,设置关联可能不是非常有用。尽管如此,不管你用它做什么,文件类型组件通过处理注册表和MIME类型数据的方式为你处理了所有繁重的工作。下边是一个设置文件关联的简短的例子:以下是代码片段:

importorg.jdesktop.jdic.filetypes.*;

import.*;

publicclassFileTypesTest{

publicstaticvoidmain(String[]args)

throwsException{

Actionaction=newAction("open",

"C:WINDOWSsystem32

otepad.exe%1");

Associationassoc=newAssociation();

assoc.addFileExtension(".mchat");

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

assoc.addAction(action);

AssociationServicesvc=newAssociationService();

svc.registerUserAssociation(assoc);

}

}Main方法的前两行创建了一个将会用notepad.exe打开文件(用%1代替)的Action。之后的四行在action和扩展名为.mchat的文件之间创建了关联。在过去,大多数操作系统专门依赖于文件扩展名或者所有的元数据来确定文件类型。然而在今天,大多数操作系统倾向于为所有文件设置MIME,因此,现在开始使用它是有益的。最后两行实际上是在系统上注册关联。在使用所有的JDICAPI时,只要本地库在你的库路径上,让它工作起来你不需要做任何特别的事情。浏览器组件JDIC的第三个主要组件是浏览器组件。不象前边的两个,它们只是让你存取系统服务,这个组件给你了一个真正在图形应用里使用的AWT器件。以前,你可以使用第三方的嵌入式组件或纯java的浏览器,但JDIC让你把用户默认的web浏览器嵌入到你的应用中,这些为我们创造了很多机会。现在写一些有全面Web支持的RSS阅读器变成了可能的事情。由于你不必把本地浏览器包含进你的应用中,下载速度也更快了。浏览器组件API可以让你访问几个浏览器事件以及在历史记录上的控制(向前,后退,刷新)。未来修订的API版本希望能提供更多存取浏览器和任意装载的文档的功能。在你的应用里使用浏览器组件实在是非常容易:以下是代码片段:

importorg.jdesktop.jdic.browser.*;

import.*;

importjavax.swing.*;

publicclassBrowserTest{

publicstaticvoidmain(String[]args)throwsException{

WebBrowserbrowser=newWebBrowser();

browser.setURL(newURL(""));

JFrameframe=newJFrame("BrowserTest");

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浏览器,它们通常是InternetExplorer或Mozilla。你不能象使用Jrex(/)那样把Mozilla的必须的部分和你的应用绑在一起。这种做法可能在Windows上行得通,IE绝对是可以的,但在Linux上有更多的问题,因为它上边的默认浏览器不一定是Mozilla(例如,在KDE上它可能是Konquorer)。希望这些问题随着项目的成熟能够解决,但目前它对许多项目是很有用的。包装器组件不象其他的JDIC,包装器模块不是API,而是把JNLP(JavaWebStart)应用转换成本地安装程序(Linux上是rpms,Solaris上是pkgs,Windows上是msis)的一组命令行工具。这不是说象Jsmooth或JexePack那样把你的应用转换成.exe;它仅仅为WebStart应用提供点击安装的功能。在程序安装之后,它将使用JNLP通过Internet更新自己,做WebStart应用能做的所有的其他事情。包装器组件需要J2SE5.0和本地工具。对Windows而言,你需要安装Microsoft的MSISDK。一旦你的环境建立了起来,就能使用命令行工具jnlp2msi,jnlp2rpm,和jnlp2pkg把你的WebStart应用转换成与平台相关的安装程序。系统托盘托盘图标API曾是一个孵化中项目,但由于社区的勤奋努力,它已经成熟并把它提升到一个完全的JDIC组件的地位。假如你的操作系统有托盘的概念的话,它的目的是在屏幕的右下角创建小程序状态图标。实际上,这种操作系统是指Windows和Linux。MacOSX用户则没有这个运气。它也支持弹出菜单和为图标提供自动工具提示。象其他JDIC一样,系统托盘支持需要本地代码,但你可以用JavaAPI编码来使用预编译的本地库。由于这个API使用范围非常小,所以它们只有两个类:SystemTray和TrayIcon。SystemTray类有一个静态工厂方法用于存取系统的默认托盘。TrayIcon让你把一个JpopupMenu和Icon添加到系统托盘的下一个可用的位置上。最后,调用SystemTray.getDefaultSystemTray().addTrayIcon()显示你的弹出菜单。让我们研究一个小例子:以下是代码片段:

importorg.jdesktop.jdic.tray.*;

importjava.awt.event.*;

importjavax.swing.*;

publicclassSystemTrayTest{

publicstaticJMenuItemquit;

publicSystemTrayTest(){

JPopupMenumenu=newJPopupMenu("MyMenu");

menu.add(newJMenuItem("Test1"));

menu.add(newJMenuItem("Test2"));

quit=newJMenuItem("Quit");

quit.addActionListener(newActionListener(){

publicvoidactionPerformed(ActionEventevt){

System.exit(0);

}});

menu.add(quit);

ImageIconicon=newImageIcon("duke.gif");

TrayIcontray_icon=newTrayIcon(icon,"SystemTrayTest!",menu);

SystemTraytray=SystemTray.getDefaultSystemTray();

tray.addTrayIcon(tray_icon);

}

publicstaticvoidmain(String[]args){

newSystemTrayTest();

}

}在SystemTrayTest构造函数的前边的几行我们用三个菜单项创建了一个JpopupMenu。最后一个是quit,增加了一个ActionListener用于退出程序。现在,除了把菜单添加到菜单条上和Jcomponent上外,我们把菜单放进了

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论