ad_qqread_mid_big">
在调用任何这些行为之前,一个应用程序必须确定是否该desktop实例支持它们。这与确定是否一个desktop实例可用是有所不同的。这个desktop.isdesktopsupported()方法告诉你是否能够创建一个实例。一旦获得一个desktop对象,你就可以查询该对象来确定支持哪些特定类型的行为。如果该desktop对象不支持特定的行为,或如果该桌面api本身并不被支持,那么desktopdemo简单地停用那些受影响的图形组件。如图2所示,在停用状态下,不能使用这些组件来调用桌面特性。
通过使用一个新的desktop实例,下列代码检查负责是否支持desktop.action并且启用适当的图形组件:
一旦该应用程序确定了被支持的行为,它即启用适当的图形组件。如果所有的组件都被启用,那么相应的ui应该看上去如图3所示。
四、 打开浏览器
调用下列实例方法将打开你的主机的默认浏览器:
因为仅当支持相关联的desktop.actiondesktopdemo时,ui组件才被启用,所以,在实际调用browse()方法之前,这个简单的演示应用程序不需要进行行为支持检查。然而,在每一种调用之前检查行为支持在实际中将增加程序的健壮性:
desktopdemo把一个java.awt.event.actionlistener添加到每一个按钮上。当被启用时,"launch browser"按钮通过它的actionlistener调用下列方法:
这个browse()方法可能抛出各种类型的异常,这包括:当该uri为null时抛出一个nullpointerexception异常;如果不支持browse行为将抛出一个unsupportedoperationexception异常;如果不能发现或启动一个缺省的浏览器或应用程序则抛出一个ioexception异常;如果一个安全管理器否定一次调用则抛出一个securityexception异常。
然而,如果一切顺利,那么听取器(listener)将从图4中相联系的文本域中检索文本,创建一个uri并且调用browse()方法。上面的代码将启动你的系统的默认浏览器并且指示该浏览器装载该uri,如图5所示。
>>>更多专题请看java api java的类 java网络专题
在调用任何这些行为之前,一个应用程序必须确定是否该desktop实例支持它们。这与确定是否一个desktop实例可用是有所不同的。这个desktop.isdesktopsupported()方法告诉你是否能够创建一个实例。一旦获得一个desktop对象,你就可以查询该对象来确定支持哪些特定类型的行为。如果该desktop对象不支持特定的行为,或如果该桌面api本身并不被支持,那么desktopdemo简单地停用那些受影响的图形组件。如图2所示,在停用状态下,不能使用这些组件来调用桌面特性。
![]() 图2:当不支持桌面api时图形组件被停用。 |
通过使用一个新的desktop实例,下列代码检查负责是否支持desktop.action并且启用适当的图形组件:
| public desktopdemo() { ... //在使用更多的桌面api前,首先检查 //是否这种api为该特定主机上的特别的虚拟机所支持。 if (desktop.isdesktopsupported()) { desktop = desktop.getdesktop(); // 现在,启用按钮以实现被支持的行为 enablesupportedactions(); } ... } /** *启用在该主机上被支持的行为。 *这些行为有:打开浏览器, *打开电子邮件客户端,和使用它们相关联的应用程序打开,编辑与打印文件。 */ private void enablesupportedactions() { if (desktop.issupported(desktop.action.browse)) { txtbrowseruri.setenabled(true); btnlaunchbrowser.setenabled(true); } if (desktop.issupported(desktop.action.mail)) { txtmailto.setenabled(true); btnlaunchemail.setenabled(true); } if (desktop.issupported(desktop.action.open)) { rbopen.setenabled(true); } if (desktop.issupported(desktop.action.edit)) { rbedit.setenabled(true); } if (desktop.issupported(desktop.action.print)) { rbprint.setenabled(true); } if (rbedit.isenabled() || rbopen.isenabled() || rbprint.isenabled()) { txtfile.setenabled(true); btnlaunchapplication.setenabled(true); } } |
一旦该应用程序确定了被支持的行为,它即启用适当的图形组件。如果所有的组件都被启用,那么相应的ui应该看上去如图3所示。
![]() 图3:当支持桌面api时,启用组件。 |
四、 打开浏览器
调用下列实例方法将打开你的主机的默认浏览器:
| public void browse(uri uri) throws ioexception |
因为仅当支持相关联的desktop.actiondesktopdemo时,ui组件才被启用,所以,在实际调用browse()方法之前,这个简单的演示应用程序不需要进行行为支持检查。然而,在每一种调用之前检查行为支持在实际中将增加程序的健壮性:
| if (desktop.issupported(desktop.action.browse)) { //启动浏览器 ... } |
desktopdemo把一个java.awt.event.actionlistener添加到每一个按钮上。当被启用时,"launch browser"按钮通过它的actionlistener调用下列方法:
| private void onlaunchbrowser(java.awt.event.actionevent evt) { uri uri = null; try { uri = new uri(txtbrowseruri.gettext()); desktop.browse(uri); } catch(ioexception ioe) { ioe.printstacktrace(); } catch(urisyntaxexception use) { use.printstacktrace(); } ... } |
这个browse()方法可能抛出各种类型的异常,这包括:当该uri为null时抛出一个nullpointerexception异常;如果不支持browse行为将抛出一个unsupportedoperationexception异常;如果不能发现或启动一个缺省的浏览器或应用程序则抛出一个ioexception异常;如果一个安全管理器否定一次调用则抛出一个securityexception异常。
然而,如果一切顺利,那么听取器(listener)将从图4中相联系的文本域中检索文本,创建一个uri并且调用browse()方法。上面的代码将启动你的系统的默认浏览器并且指示该浏览器装载该uri,如图5所示。
![]() 图4:使用一个特定uri启动默认浏览器。 ![]() 图5:使用桌面api启动默认浏览器。 |
| 上一页 1 2 3 下一页 |
| 相关内容:邮件 虚拟机 操作系统 solaris opera |
| 【收藏此页】【大 中 小】【打印】【关闭】 | |
| 上一篇:java中properties类的使用 下一篇:struts的巨大烦恼 真的不适合大系统? 10万个软件免费高速下载 | |
| ||||||||||||||
|
|
如果支持该行为的话,该应用程序能够启动主机的默认电子邮件客户端-通过调用这个desktop实例方法:
| public void mail(uri uri) throws ioexception desktopdemo为"launch mail"按钮提供了一个actionlistener。在这种情况中,该听取器调用下列方法: private void onlaunchmail(java.awt.event.actionevent evt) { string mailto = txtmailto.gettext(); uri urimailto = null; try { if (mailto.length() > 0) { urimailto = new uri("mailto", mailto, null); desktop.mail(urimailto); } else { desktop.mail(); } } catch(ioexception ioe) { ioe.printstacktrace(); } catch(urisyntaxexception use) { use.printstacktrace(); } ... } |
该onlaunchmail()方法从相关的文本域中检索电子邮件接收者,并且在存在一位接收者时使用一种mailto模式的参数创建uri,然后调用mail()方法。这个mail()方法被重载,这样你可以使用(或不使用)一个描述其mailto接收者的uri(见图6)来调用这个方法。
![]() 图6:使用一个电子邮件接收者启动默认电子邮件客户端。 |
当创建这个uri时,你可以使用多个电子邮件接收者。这个mailto模式支持cc,bcc,subject和body域。例如,可以使用下列文本来创建一个mailto uri:
mailto:duke@sun.com?subject=happy new year!&body=happy new year, duke!
图7显示出相应的结果。
![]() 图7:桌面api使用多个mailto参数启动默认电子邮件客户端。 |
当然,你也可以不使用参数来调用mail()。在这种情况中,你的电子邮件客户端将启动一个新的没有指定接收者、主题或邮件正文的电子邮件窗口。
六、 打开、编辑和打印文件
java应用程序可以分别使用一个desktop对象的open(),edit()和print()方法来从与其相联系的应用程序中打开,编辑和打印文件(见图8)。同样,仅在该desktop实例支持它们时,desktopdemo才允许这些行为,因此在本应用程序环境下,不必再次进行这种支持检查。
![]() 图8:启动与一特定的文件类型相联系的应用程序。 |
desktopdemo中的每一个单选按钮也都有它自己的actionlistener。在这种情况中,每一个单选按钮都设置一个实例变量,以便描述最近选择的按钮的相关联desktop.action:
| desktop.action action; private void onprintaction(java.awt.event.actionevent evt) { action = desktop.action.print; } private void oneditaction(java.awt.event.actionevent evt) { action = desktop.action.edit; } private void onopenaction(java.awt.event.actionevent evt) { action = desktop.action.open; } |
当你按下"launch default application"按钮时,它调用它自己的听取器-这将调用下列方法:
| private void onlaunchdefaultapplication(java.awt.event.actionevent evt) { string filename = txtfile.gettext(); file file = new file(filename); try { switch(action) { case open: desktop.open(file); break; case edit: desktop.edit(file); break; case print: desktop.print(file); break; } } catch (ioexception ioe) { ioe.printstacktrace(); } ... } |
这个方法决定选择哪个desktop.action并且调用适当的desktop实例方法-open(),edit()或print()。每个方法都需要一个file参数-它被用于执行要求的行为。
有趣的是,不同的应用程序可以针对甚至相同的文件类型上的这些不同的行为进行注册。例如,可以使用open行为启动firefox浏览器,使用edit行为启动emacs,甚至使用print行为启动另外不同的应用程序。你的主机桌面的关联用来决定应该调用什么样的应用程序。
注意 使用mustang中现有桌面api来操作桌面文件关联是不可能的,而且目前只能使用平台依赖的工具来创建或改变这些关联。
七、 总结
桌面集成是mustang的一个重要主题。mustang支持这种主题的一种方式是提供一组java.awt.desktop api。这种api允许java应用程序启动主机的默认浏览器和电子邮件客户端。另外,java应用程序能够启动与特定的文件类型相关联的应用程序以打开,编辑和打印文件。尽管java应用程序不能操作,创建,或改变文件关联,但是这些桌面api确定允许java应用程序启动默认的相关联的应用程序。







闽公网安备 35060202000074号