0

外部リソース ファイルを使用する Java スイング アプリケーションを作成しています。
リソース ファイルの多くは、特定の選択をロードするためにのみ必要です。
選択すると、最初のウィンドウが閉じ、適切な外部リソースがロードされ、別のウィンドウが開き、リソースが表示されます。

最初のウィンドウには、読み込み時間をカバーするスプラッシュ スクリーンがあります。
2番目のウィンドウに似たものを持たせるにはどうすればよいですか?
私が見たのは、同じウィンドウでタスクが発生することであり、これはこのプロジェクトでは実行できず、Java の組み込みスプラッシュ スクリーンは 2 回目は開始されません (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

SplashScreenAPIを使用する代わりに、自分でJWindow.

これに、必要な機能 (JLabel背景JLabel用、メッセージ用など) を提供する一連のコンポーネントを追加して、リソースの読み込み中に表示できるようにすることができます。

完了したら、ウィンドウを簡単に破棄できます。

また、すべての読み込みをバックグラウンド スレッドで実行していることを確認してください。 SwingWorkerこの目的には良いでしょう、私見

この回答は概念を示しています。2番目の例を探してください...

于 2013-10-15T05:28:45.927 に答える