|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。 提纲:本文将以详细的实例向你展现JavaSE6在桌面开辟中所供应的一系列优异特性。
1、弁言
跟着JavaSE6Beta的刊行,Java开辟者不再必要本人往完成Java本机接口(JNI)即可以在其使用程序中到场桌面产物所具有的特性。这些桌面集成特性如今已成为内核的一个构成部分。
最新的Java尺度版本6.0(代码名为Mustang)将在功效长进行一系列的改善--开辟者们可以便利地用Java处置平安,JMX,操纵体系文件,国际化和桌面开辟等一系列成绩。Sun在开辟这个版本的过程当中体现出十分主动的互助立场。他们经由过程JSR270细心地聆听开辟者的定见而且在2006年2月早些时分就刊行了一切的JavaSE源码和二进制代码。看来,Sun正在倾力打造全新的桌面开辟工具。
相对之前的Java版本,Mustang的桌面集成才能出格受Java开辟者接待。这些新特性把良多风趣的功效到场到Java桌面使用程序的开辟中。之前,开辟比方InternetExplorer,体系托盘和邮件客户端等Java时,开辟者必需在创立如Jtray和SysTray等Java本机接口(JNI)方面年夜伤头脑。只管这类"补钉"计划可以完成既定目标,可是尽年夜部分的Java开辟者都十分企望这些特性成为中心Java平台的一部分。
本文将具体剖析一个示例使用程序GoMustang的创立历程。从中,我将向你展现怎样利用JavaSE6在使用程序启动时显现一个Splash屏幕,如何创立体系托盘,和如何从Java外部启动本机桌面互联网扫瞄器。
注重,为调试本文中的示例程序,你必要安装:JavaStandardEdition6Beta和ApacheAnt1.6.5。
2、开辟情况
(一)筹办JavaSE6Beta
起首,你要从Sun的Java站点下载JavaSE6Beta。由于Sun已断定将在2006年的秋季正式刊行JavaSE6,并且据JSR270专家组的倡议个中的一些特性还将会作得当的改动;因而,今朝在你的桌面开辟中试用Mustang恰是时分。
估量,终极本文中所形貌的特性不会呈现多年夜变更;以是你能够宁神利用JDK,JRE等的最新下载版本。
起首,请确保你的桌面平台被撑持。我在WindowsXP上开辟和测试了本文的示例使用程序,且毫无成绩。
其次,还要确保你的盘算机的Windows体系属性中的情况变量指向JavaSE6.0JDK。我把JAVA_HOME情况变量设置为JAVA_HOME=C:ProgramFilesJavajdk1.6.0。
一旦安装完成,你应当当即反省JavaJRE的版本。假如统统顺遂,应当显现相似上面的一条动静:
C:javamustang>java-version
javaversion"1.6.0-beta"
Java(TM)2RuntimeEnvironment,StandardEdition(build1.6.0-beta-b59g)
JavaHotSpot(TM)ClientVM(build1.6.0-beta-b59g,mixedmode,sharing)
(二)筹办Ant
在本文中,你将利用ApacheAnt来构建示例使用程序。因而,假如你还没有这个工具,你能够从Apache网站下载并把它安装到你的盘算机上。
然后,你可使用Ant属性来反省AntJava版本。以下的例子显现了一个不准确的Java版本:
${ant.java.version}
这是由于Ant内置的ant.java.version体系属性被计划仅具有1.1,1.2,1.3,1.4和1.5这几个值。估量,Ant开辟小组大概很快就会更新这个属性以包括1.6;可是,当你想本人完成这一点时要出格当心。
为了稳重起见,你可使用-debug参数来运转Ant。假如显现以下内容,则申明Ant实践上在利用一个1.6版本的JRE:
>>
DetectedJavaversion:1.5in:C:ProgramFilesJavajdk1.6.0jre
<<
(三)安装你的开辟情况
接上去,安装你的开辟情况。为此,最复杂的办法是下载本文响应的源码并解压。假如你把ZIP文件解压到你的C:路径下,那末你会看到以下布局的文件和目次:
c:mustang
|_build.xml
+_src
前面,你将利用Ant构建文件build.xml来完成复制,编译,构建,打包和运转GoMustang示例使用程序。该文件包括以下几个关头的Ant方针:
[init]
[clean]
[compile]
[dist]
[run]
这里,[init]方针卖力创建文件夹布局而且把文件拷贝到build文件夹;[compile]完成编译,而[dist]经由过程利用一个Manifest文件来创立一个JAR(前面将具体会商)。[run]方针卖力启动你的使用程序,而[clean]将匡助你起首删除一切的由Ant义务所创立的文件和目次,然后从一个完整洁净的情况入手下手上面的义务。
src目次包括3个文件:一个GoMustang.java(源码文件)和两个GIF文件(gomustang-splash.gif用作Splash屏幕,gomustang.gif用作体系托盘中的图标)。
如今,你已打好了基本。上面,我们入手下手创立你的使用程序的Splash屏幕。
3、Splash屏幕
对基于桌面的使用程序来讲,Splash屏幕一向在使用程序的启动过程当中起着关头感化。一个夺目的Splash屏幕能利用户热切地企望使用程序的启动--经由过程显现行销告白,特定的功令条则,专业图像,等等。同时,它还供应给使用程序必定的工夫周期以装载请求的库文件。
在Java使用程序开辟中,完成Splash屏幕一向是一种应战性编程,由于在JVM启动和一切请求的JRE和使用程序库被装载出息序没法获得把持权。而比及一个Java使用程序失掉把持线程的时机时,显现一个Splash屏幕已太晚了。
JavaSE6乃至同意一个使用程序在JVM启动前就能够显现一个Splash屏幕。这项功效被构建于Java使用程序启动器中--由它卖力在一个未经润色的窗口中显现一幅图象。它同意利用GIF,PNG或JPEG图像,能够是通明性或半通明的,而且能够存在动画效果。并且,JavaSE6刊行中还带有一个SplashScreen类--它同意一旦使用程序把持线程,该程序就能够操纵Splash屏幕。
你能够用上面两种体例之一来启动一个Splash屏幕:
1.在一个JAR的Manifest文件中指定一个详细的SplashScreen-Image属性;
2.利用一个命令行-splash参数。
(一)利用JAR的Manifest属性
本文下载源码中的JAR文件包括了一个gomustang-splash.gif文件(此文件在使用程序启动时显现一个Splash屏幕)和编译类文件GoMustang.class。这个JAR文件的Manifest包括界说main()办法的类的名字和SplashScreen-Image属性(它指向gomustang-splash.gif文件)。
上面的列表展现了Antbuild.xmlJAR义务的内容--个中指定了main-class和SplashScreen-Image属性:
...
<jarjarfile="${dist}/GoMustang.jar"basedir="${build}">
<manifest>
<attributename="Main-Class"value="GoMustang"/>
<attributename="SplashScreen-Image"value="gomustang-splash.gif"/>
</manifest>
</jar>
...
为了看清Splash屏幕的真正运转,你能够经由过程在命令提醒符上输出antrun来实行build.xml的[run]方针。因该程序很小,以是Java使用程序会在人眼能瞥见它之前完成翻开和封闭操纵。为此,你可使用停息3秒的编码小技能。
一旦运转run方针,Ant应当会输入如所示的把持台跟踪信息,然后停息3秒,其间用户会看到Splash屏幕中的gomustang-splash.gif图片。
.Ant停息
3秒后,Ant剧本完成使用程序的创立,见。
.Ant剧本完成体系托盘的创立
一个图标将在体系托盘中被创立,由所示。
.GoMustang图标
(二)利用命令行-splash参数
显现一个splash屏幕的第二种办法是,利用-splash命令行参数传送splash屏幕文件名,以下所示
C:mustanguild>java-splash:gomustang-splash.gifGoMustang
注重,为了使该命令阃常运转,你必要从c:mustanguild目次(编译class文件和splash屏幕GIF文件地点的地位)下利用Java的命令行体例。这些文件都是由Ant中的build.xml文件中的义务所创立。
一旦使用程序取得一个线程的存取权限,你就能够利用java.awt.SplashScreen类经由过程编程存取Splash屏幕。这是一个singleton类,它供应专门的函数来改动Splash屏幕图象,检索Splash屏幕的巨细和界线,操纵有关图形对象,并最初封闭Splash屏幕。
<P> 4、GoMustang.java文件
在持续之前,你应当先熟习一下GoMustang.java文件。这个文件界说一个单个的Java类GoMustang,而且包括以下两个关头函数:
・main
・createTrayIcon()
你大概已猜出,main是次要的出口点-你能够存取java.awt.SplashScreenJava类以操纵Splash屏幕。在GoMustang使用程序中,你可使它停息几秒,然后经由过程挪用splashScreen.close()来封闭Splash屏幕。但是,你能够在封闭它之前来操纵该Splash屏幕。
createTrayIcon()类是这两个函数中更加使人冲动的。它卖力完成一切的风趣的事情来安装使用程序。这又触及到我们将要会商的另外一个主题:体系托盘图标。
5、体系托盘图标
体系托盘位于Windows的义务形态区或位于Gnome的关照区。它是在一个操纵体系的桌面UI的角落的一个很小的地区,能供应到以后运转的使用程序的可视化和间接的存取。本文所供应的Windows平台上的GoMustang使用程序可以完成当右击体系托盘图标时发生一个弹出菜单(见)。
.在体系托盘上的GoMustang的弹出菜单
该GoMustang使用程序SystemTray有一个弹出菜单。菜单有两个菜单项:"Exit"和"LaunchBrowser"。"Exit"卖力加入使用程序,而"LaunchBrowser"卖力翻开默许的互联网扫瞄器并使其指向http://www.devx.com。
在已往,创立可以天真把持操纵体系的桌面体系托盘的Java使用程序必要不是Java中心部分的库的撑持。为此,发生了JDIC(Java桌面集成组件),并且Sun决意把JDIC的一些组件作为JavaSE6的一部分一同刊行。相干的类java.awt.SystemTray和java.awt.Desktop形貌了这些关头组件。个中,Java.awt.SystemTray形貌操纵体系的义务形态区或关照区。
显现在体系托盘中的图标是由java.awt.TrayIcon形貌的。TrayIcon不但形貌图象并且还形貌吸收事务的实践对象,并卖力显现提醒信息,增加弹出菜单项,显现动静,等等。你能够经由过程displayMessage(String)和setToolTip(String)函数来设置TrayIcon上的动静和提醒信息。TrayIcon还能把ActionEvents转发到经过Trayicon的addActionListener(ActionListener)函数注册的ActionListener。弹出菜单是由java.awt.PopupMenu形貌的,并且你能够经由过程addPopupMenu(PopupMenu)函数把它们增加到TrayIcon。
上面,让我们分析一下GoMustangJava类的createTrayIcon()函数。正如在列表1(见所附源码)中的GoMustang代码的具体正文所标明的:起首,你要挪用SystemTray.isSupported()函数来反省是不是操纵体系撑持最小SystemTray功效;假如撑持的话,这个函数应当前往true。
一旦程序晓得操纵体系撑持体系托盘功效,它就创立Exit和LaunchBrowser菜单项,并且把这些菜单项加到弹出菜单中。当用户右击体系托盘的图标时,这个菜单就会弹出。ActionListeners函数被加到Exit和LaunchBrowser菜单项上。当用户选择这些菜单项时,actionPerformed(ActionEvent)将给程序一个时机实行某种举措。这关于Exit菜单项来讲是经由过程实行System.exit(0)命令而加入使用程序;而关于LaunchBrowser菜单项来讲是经由过程指向http://www.devx.com而启动缺省的扫瞄器。注重,启动扫瞄器必要利用新的java.awt.Desktop对象(稍后再会商)。
然后,使用程序创立一个弹出菜单对象而且把Exit和LaunchBrowser菜单项增加到弹出菜单。下一步是用一个奔马图象创立托盘图标。你可使用getClass().getResourceAsStream(filename)函数存取本文下载源码中的gomustang.gif文件并把它加载到一个图象对象中。然后,托盘图标对象就能够与弹出菜单一同创立;Action和鼠标听取器也被联系关系到托盘图标上--关于本文例程来讲,只显现一条动静。托盘图标最初被增加到体系托盘上。体系托盘是一个singleton对象,它能够经由过程SystemTray对象的getSystemTray()函数加以检索。在体系托盘上创立托盘图标的完全历程就是如许。
如今,让我们更具体地看一下"LaunchBrowser"菜单项是怎样启动扫瞄器的。你能够剖析响应于"LaunchBrowser"菜单项的函数actionPerformed(ActionEvent)"来检察怎样利用桌面临象。请参考上面代码(列表2的一部分):
...
MenuItemlaunchBrowserItem=newMenuItem("LaunchBrowser");
ActionListenerlaunchListener=newActionListener(){
publicvoidactionPerformed(ActionEvente){
if(Desktop.isDesktopSupported()){
actionMessage="LaunchedBrowser";
try{
trayIcon.displayMessage("GoMustang!",
"LaunchingBrowser...",TrayIcon.MessageType.INFO);
Desktopdesktop=Desktop.getDesktop();
desktop.browse(newURI("http://dev.yesky.com"));
trayIcon.setToolTip("GoMustang!");
}
catch(Exceptionexp){...}
}
}
};
launchBrowserItem.addActionListener(launchListener);
...
在列表2(见所附源码)中最使我们感乐趣的关头对象是java.awt.Desktop类。这个Desktop类,如我们早些时分所说起的,来自JDIC。该Desktop类卖力定位和运转操纵体系特定的桌面使用程序。默许的因特网扫瞄器使用程序映照是Mozilla的FireFox;因而,在显现动静"LaunchingBrowser..."今后,desktop.browse(URI)函数将翻开一个指向http://dev.yesky.com的窗口。
6、小结
关于Java在桌面把持方面的开辟来讲,真正风趣的事变方才入手下手。我们朴拙期盼在Java今后的刊行版本中到场更多的桌面把持功效。
Java到底会发战成什么样,让我们拭目以待吧,我始终坚信着java会更好。以上都是俺个人看法,欢迎大家一起交流. |
|