430.md 6.4 KB
Newer Older
W
init  
wizardforcel 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
# 如何创建启动画面

> 原文: [https://docs.oracle.com/javase/tutorial/uiswing/misc/splashscreen.html](https://docs.oracle.com/javase/tutorial/uiswing/misc/splashscreen.html)

几乎所有现代应用程序都有闪屏。通常,启动屏幕用于以下目的:

*   宣传产品
*   向用户指示应用程序在长启动期间启动
*   提供每次访问仅需一次的信息

Java 基础类,Swing 和抽象窗口工具包(AWT),使开发人员能够在 Java 技术应用程序中创建初始屏幕。但是,因为启动屏幕的主要目的是向用户提供有关应用程序启动的反馈,所以应用程序启动和启动屏幕弹出之间的延迟应该是最小的。在弹出启动屏幕之前,应用程序必须加载并初始化 Java™虚拟机(JVM),AWT,Swing 以及有时依赖于应用程序的库。由此产生的几秒钟延迟使得基于 Java™技术的闪屏不再令人满意。

幸运的是,Java™SE 6 提供了一种解决方案,允许应用程序更早地显示启动屏幕,甚至在虚拟机启动之前。 Java 应用程序启动器能够解码图像并在简单的非装饰窗口中显示它。

启动画面可以显示任何`gif``png``jpeg`图像,具有透明度,半透明度和动画效果。下图表示作为动画`gif`文件开发的 Java 应用程序初始屏幕的示例。

W
wizardforcel 已提交
17
![Splash Screen for Java Application](img/e2d491d5f28ff0986ee26f1b2c2b1242.jpg)
W
init  
wizardforcel 已提交
18 19 20

[`SplashScreen`](https://docs.oracle.com/javase/8/docs/api/java/awt/SplashScreen.html) 类用于关闭启动画面,更改启动画面图像,获取图像位置或大小,以及在启动画面中绘画。应用程序无法创建此类的实例。只能在此类中创建单个实例,并且可以使用`getSplashScreen()`静态方法获取此实例。如果应用程序在启动时未通过命令行或清单文件选项创建启动屏幕,则`getSplashScreen`方法返回 null。

W
wizardforcel 已提交
21
通常,开发人员希望将闪屏图像保留在屏幕上并在图像上显示某些内容。闪屏窗口具有带 alpha 通道的覆盖表面,可以使用传统的`Graphics2D`接口访问此表面。
W
init  
wizardforcel 已提交
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151

以下代码段显示如何获取`SplashScreen`对象,然后如何使用`createGraphics()`方法创建图形上下文:

```
...
        final SplashScreen splash = SplashScreen.getSplashScreen();
        if (splash == null) {
            System.out.println("SplashScreen.getSplashScreen() returned null");
            return;
        }
        Graphics2D g = splash.createGraphics();
        if (g == null) {
            System.out.println("g is null");
            return;
        }
...

```

[`SplashDemo.java`](../examples/misc/SplashDemoProject/src/misc/SplashDemo.java) 文件中找到演示的完整代码。

* * *

**Note:** 

SplashDemo 应用程序使用固定坐标显示叠加信息。这些坐标是图像相关的,并为每个闪屏单独计算。

* * *

可以通过以下方式显示本机启动画面:

*   命令行参数
*   带有指定清单选项的 Java™Archive(JAR)文件

要从命令行显示启动画面,请使用`-splash:`命令行参数。此参数是一个 Java 应用程序启动器选项,显示启动屏幕:

```
java -splash:<file name> <class name>

```

* * *

**Try this:** 

1.  编译 [``SplashDemo.java``](../examples/misc/SplashDemoProject/src/misc/SplashDemo.java)文件。
2.[``splash.gif``](../examples/misc/SplashDemoProject/src/mihttps://docs.oracle.com/javase/tutorial/images/splash.gif)图像保存在`images`目录中。
3.  使用以下参数从命令行运行应用程序:

    ```
    java -splash:images/splash.gif SplashDemo

    ```

4.  等到启动画面完全显示。
5.  出现应用程序窗口。要关闭窗口,请从弹出菜单中选择“文件”|“退出”或单击“X”。
6.  将启动画面名称更改为不存在的图像,例如`nnn.gif`。运行应用程序如下:

    ```
    java -splash:images/nnn.gif SplashDemo

    ```

7.  您将看到以下输出字符串:

    ```
    SplashScreen.getSplashScreen() returned null

    ```

* * *

如果您的应用程序打包在 JAR 文件中,则可以使用清单文件中的`SplashScreen-Image`选项来显示启动画面。将图像放在 JAR 文件中,并在选项中指定路径,如下所示:

```
Manifest-Version: 1.0
Main-Class: <class name>
SplashScreen-Image: <image name>

```

* * *

**Try this:** 

1.  编译 [``SplashDemo.java``](../examples/misc/SplashDemoProject/src/misc/SplashDemo.java)文件。
2.[``splash.gif``](../examples/misc/SplashDemoProject/src/mihttps://docs.oracle.com/javase/tutorial/images/splash.gif)图像保存在`images`目录中。
3.  按如下方式准备`splashmanifest.mf`文件:

    ```
    Manifest-Version: 1.0
    Main-Class: SplashDemo
    SplashScreen-Image: images/splash.gif

    ```

4.  使用以下命令创建 JAR 文件:

    ```
    jar cmf splashmanifest.mf splashDemo.jar SplashDemo*.class images/splash.gif

    ```

    有关 JAR 文件的更多信息,请参阅 JAR 文件页面的[打包程序中的](../../deployment/jar/index.html)[使用 JAR 文件](../../deployment/jar/basicsindex.html)。
5.  运行应用程序:

    ```
    java -jar splashDemo.jar

    ```

6.  等到启动画面完全显示。
7.  出现应用程序窗口。要关闭窗口,请从弹出菜单中选择“文件”|“退出”或单击“X”。

* * *

`SplashScreen`类不能用于创建启动画面。只能在此类中创建单个实例。

| 方法 | 目的 |
| :-- | :-- |
| [getSplashScreen()](https://docs.oracle.com/javase/8/docs/api/java/awt/SplashScreen.html#getSplashScreen--) | 返回用于 Java 启动初始屏幕控制的`SplashScreen`对象。 |
| [createGraphics()](https://docs.oracle.com/javase/8/docs/api/java/awt/SplashScreen.html#createGraphics--) | 为初始屏幕叠加图像创建图形上下文(作为`Graphics2D`对象),允许您在初始屏幕上绘图。 |
| [getBounds()](https://docs.oracle.com/javase/8/docs/api/java/awt/SplashScreen.html#getBounds--) | 以`Rectangle`的形式返回闪屏窗口的边界。 |
| [close()](https://docs.oracle.com/javase/8/docs/api/java/awt/SplashScreen.html#close--) | 关闭启动屏幕并释放所有相关资源。 |

下表列出了使用闪屏的示例。

| 例 | 在哪里描述 | 笔记 |
| :-- | :-- | :-- |
| [`SplashDemo`](../examples/misc/index.html#SplashDemo) | 这个部分 | 在打开应用程序窗口之前显示启动画面。 |