シンプルな JavaFX フォームを設計しています。
まず、JavaFX 環境をロードします (そして、終了するのを待ちます)。次のようにします。
final CountDownLatch latch_l = new CountDownLatch(1);
try {
// init the JavaFX environment
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new JFXPanel(); // init JavaFX
latch_l.countDown();
}
});
latch_l.await();
}
これはうまくいきます。(最初にこの方法でJavaFXをロードする必要がある理由は、主にSwingアプリケーションであり、内部にいくつかのJavaFXコンポーネントが含まれているためですが、それらは後でロードされます)
ここで、起動時にスプラッシュスクリーンを追加し、JavaFX 環境のロード中にそれを表示したいと思います (実際には、アプリケーションのロゴや商標などがあるため、5 秒間画面に表示されます。示す必要があります)
そこで、次のように JWindow を画面に表示するだけの SplashScreen クラスを思いつきました。
public class SplashScreen {
protected JWindow splashScreen_m = new JWindow();
protected Integer splashScreenDuration_m = 5000;
public void show() {
// fill the splash-screen with informations
...
// display the splash-screen
splashScreen_m.validate();
splashScreen_m.pack();
splashScreen_m.setLocationRelativeTo(null);
splashScreen_m.setVisible(true);
}
public void unload() {
// unload the splash-screen
splashScreen_m.setVisible(false);
splashScreen_m.dispose();
}
}
ここで、スプラッシュ スクリーンをロードして 5 秒間表示したいと考えています。一方、JavaFX 環境もロードする必要があります。
だから私はこのように CountDownLatch を更新しました:
final CountDownLatch latch_l = new CountDownLatch(2); // now countdown is set to 2
final SplashScreen splash_l = new SplashScreen();
try {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
// show splash-screen
splash_l.show();
latch_l.countDown();
// init the JavaFX environment
new JFXPanel(); // init JavaFX
latch_l.countDown();
}
});
latch_l.await();
splash_l.unload();
}
つまり、動作していますが、スプラッシュはJavaFX環境がロードされるまで残っているため、基本的には非常に迅速にアンロードされます(私が書いたコードを考えると、これは正常です)。
EDT をフリーズせずにスプラッシュ画面を最小 5 秒間表示する方法 (JavaFX の読み込みが速い場合) は?
ありがとう。