0

我正在编写一个使用外部资源文件的 java swing 应用程序。
许多资源文件只需要加载某些选择。
进行选择后,第一个窗口关闭,加载适当的外部资源,并打开另一个窗口,其中包含这些资源。

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

4

2 回答 2

2

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

  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 的第一个初始屏幕,然后绘制新屏幕。

于 2013-10-15T09:58:15.897 回答
1

SplashScreen可以简单地为自己创建一个JWindow.

您可以在其中添加一堆组件来提供您需要的功能(即,一个JLabel用于背景,一个JLabel用于消息)并在您加载资源时使其可见。

完成后,您可以简单地处理窗口。

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

这个答案演示了这个概念,寻找第二个例子......

于 2013-10-15T05:28:45.927 回答