如何为程序中加载创建第二个闪屏?

时间:2013-10-15 05:20:24

标签: java swing

我正在编写一个使用外部资源文件的java swing应用程序。
许多资源文件仅在加载某些选择时是必需的。
在进行选择时,第一个窗口关闭,加载适当的外部资源,并打开另一个带有资源的窗口。

第一个窗口有一个启动画面来覆盖加载时间。
如何让第二个窗口有类似的东西?
我所看到的涉及在同一个窗口中发生的任务,这对于该项目是不可行的,并且Java的内置启动画面不会再次启动(SplashScreen.getSplashScreen返回null)。

2 个答案:

答案 0 :(得分:2)

OtrosLogViewer中,我显示MANIFEST.MF中定义的第一个启动画面。加载应用程序时,我会根据加载进度渲染新的启动画面。 OtrosSplah.java调用方法渲染来重绘splash:

  private static void render() {
      SplashScreen splashScreen = SplashScreen.getSplashScreen();
      if (splashScreen == null) {
        return;
      }
      Graphics2D g = splashScreen.createGraphics();
      if (g == null) {
        return;
      }

      if (version == null) {
        try {
          version = VersionUtil.getRunningVersion();
        } catch (IOException e) {
          version = "?";
        }
        version = "Version: " + version;
      }

      g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
      g.setComposite(AlphaComposite.Clear);
      Rectangle bounds = splashScreen.getBounds();
      g.fillRect(0, 0, bounds.width, bounds.height);
      g.setPaintMode();
      g.setColor(Color.BLACK);
      g.setFont(g.getFont().deriveFont(14f));
      g.drawString(message, 20, 110);
      g.drawString(version, 20, 130);
      splashScreen.update();
    }

你也可以这样做。从MANIFEST.MF显示第一个启动画面,然后再绘制新的启动画面。

答案 1 :(得分:1)

您可以简单地创建一个SplashScreen,而不是使用JWindow API。

在这里你可以添加一堆组件来提供你需要的功能(即背景为JLabel,消息为JLabel,并在加载时使其可见你的资源。

完成后,您只需处理窗口即可。

另外,请确保您在后台线程中执行所有加载操作。 SwingWorker对于这个目的是好的,恕我直言

This answer演示了这个概念,寻找第二个例子......