这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并可能使用不再可用的技术。
有关Java SE 9及后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或不推荐使用的选项的信息,请参阅JDK发行说明。
几乎所有现代应用程序都有一个启动画面。通常,启动画面用于以下目的:
Java基础类(包括Swing和抽象窗口工具包(AWT))允许开发人员在Java技术应用程序中创建启动画面。然而,由于启动画面的主要目的是向用户提供有关应用程序启动的反馈,因此应用程序启动和启动画面弹出之间的延迟应尽量小。在启动画面弹出之前,应用程序必须加载和初始化Java虚拟机(JVM)、AWT、Swing,有时还包括应用程序特定的库。几秒钟的延迟使得使用基于Java技术的启动画面变得不太理想。
幸运的是,Java SE 6提供了一种解决方案,允许应用程序在虚拟机启动之前更早地显示启动画面。Java应用程序启动器能够解码图像并在一个简单的非装饰窗口中显示它。
启动画面可以显示任何带有透明度、半透明度和动画的gif、png或jpeg图像。下图是一个以动画gif文件开发的Java应用程序启动画面的示例。
SplashScreen类用于关闭启动画面、更改启动画面图像、获取图像位置或大小,并在启动画面中绘制。应用程序无法创建此类的实例。只能存在一个在该类内部创建的单一实例,并且可以使用getSplashScreen()静态方法获取此实例。如果应用程序没有通过命令行或清单文件选项在启动时创建启动画面,则getSplashScreen方法返回null。
通常,开发人员希望将启动画面图像保持在屏幕上,并在图像上显示其他内容。启动画面窗口具有一个带有alpha通道的覆盖层,并且可以使用传统的Graphics2D接口访问此层。
以下代码片段展示了如何获取SplashScreen对象,然后使用createGraphics()方法创建一个图形上下文:
...
final SplashScreen splash = SplashScreen.getSplashScreen();
if (splash == null) {
System.out.println("SplashScreen.getSplashScreen()返回null");
return;
}
Graphics2D g = splash.createGraphics();
if (g == null) {
System.out.println("g是null");
return;
}
...
在SplashDemo.java文件中可以找到演示的完整代码。
SplashDemo应用程序使用固定坐标来显示叠加信息。这些坐标是与图像相关的,并且针对每个启动画面单独计算。
本机启动画面可以通过以下方式显示:
使用-splash:命令行参数来从命令行显示启动画面。该参数是Java应用程序启动器选项,用于显示启动画面:
java -splash:<文件名> <类名>
SplashDemo.java文件保存在名为misc的目录中。javac misc/SplashDemo.java
splash.gif图像保存在images目录中。java -splash:images/splash.gif misc.SplashDemo
nnn.gif。使用以下方式运行应用程序:
java -splash:images/nnn.gif misc.SplashDemo
SplashScreen.getSplashScreen()返回null
如果您的应用程序打包在JAR文件中,可以使用清单文件中的SplashScreen-Image选项显示启动画面。将图像放在JAR文件中,并在选项中指定路径,如下所示:
Manifest-Version: 1.0 Main-Class: <类名> SplashScreen-Image: <图片名>
SplashDemo.java文件保存在名为misc的目录中。javac misc/SplashDemo.java
splash.gif图像保存在images目录中。splashmanifest.mf文件如下:
Manifest-Version: 1.0 Main-Class: misc.SplashDemo SplashScreen-Image: images/splash.gif
jar cmf splashmanifest.mf splashDemo.jar misc/SplashDemo*.class images/splash.gif
java -jar splashDemo.jar
SplashScreen类无法用于创建启动画面,只能存在一个在该类内创建的实例。
| 方法 | 用途 |
|---|---|
| getSplashScreen() | 返回用于控制Java启动画面的SplashScreen对象。 |
| createGraphics() | 为启动画面覆盖图像创建一个图形上下文(作为Graphics2D对象),允许您在启动画面上绘图。 |
| getBounds() | 返回启动画面窗口的边界作为Rectangle。 |
| close() | 关闭启动画面并释放所有关联的资源。 |
下表列出了使用启动画面的示例。
| 示例 | 所在位置 | 注释 |
|---|---|---|
SplashDemo |
本节 | 在打开应用程序窗口之前显示一个启动画面。 |