スプラッシュスクリーンは、マニフェストを介してjarに簡単に追加できます。
問題は、デフォルトでは、Swingアプリの読み込みにかかる時間だけ表示されることです。したがって、2回目(3回目、4回目など)の実行では、GUIで使用されるJVMやクラスなどがすでにロードされているため、スプラッシュ画面が高速に表示されます。
より長くとどまるスプラッシュを作成するための私のゲームでは、次の2つの方法がありました。
/**
* This will render the splash for longer than just loading components
*
* @return true if there is a splash screen file supplied (set via java or
* manifest) or false if not
* @throws IllegalStateException
*/
private boolean showSplash() throws IllegalStateException {
final SplashScreen splash = SplashScreen.getSplashScreen();
if (splash == null) {
return false;
}
Graphics2D g = splash.createGraphics();
if (g == null) {
return false;
}
for (int i = 0; i < 100; i++) {//loop 100 times and sleep 50 thus 100x50=5000milis=5seconds
renderSplashFrame(g);
splash.update();
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
}
splash.close();
return true;
}
private void renderSplashFrame(Graphics2D g2d) {
//draw anyhting else here
}
これは次のように呼ばれます:
JFrame frame=...;
...
//show splash
if (!showSplash()) {
JOptionPane.showMessageDialog(null, "SplashScreen could not be shown!", "Splash Error: 0x003", JOptionPane.ERROR_MESSAGE);
}
// set JFrame visible
frame.setVisible(true);
frame.toFront();
showSplash()
スプラッシュスクリーンが提供されていない場合、つまりマニフェストにスプラッシュスクリーンを追加していない場合は、falseが返されることに注意してください。
また、まだ読んでいない場合は、スプラッシュ画面を作成する方法を読むことをお勧めします。
この他の同様の回答/質問も参照してください:Eclipseのようなプログレスバーでスプラッシュ画面を作成します