以下のコードは、私がEclipseで開発した小さなJavaアプリケーション用のスプラッシュ画面の実装です。スプラッシュスクリーンはPC上ではうまく動作しますが、MACでは動作しません。 MAC OSXでは、フレームが最初に表示され、2秒間にグレーの領域が表示され、残りの4秒間に画像が表示されます。通常、画像は直ちに4秒間表示されます。 MAC上に画像が表示されるまでに時間がかかり、PC上ですべてうまく動作する理由は何ですか? PS:実行可能なJarとしてアプリケーションをデプロイしました。すべてのコンピュータでJava 8を使用しています。ありがとうございました。Mac OSXではJavaのスプラッシュ画面は動作しませんが、PC上では動作します
public static void main(String[] args)
{
SplashScreen splSplashScreen = new SplashScreen();
//Main window
FenetrePrincipale fenetrePrincipale = new FenetrePrincipale();
}
public class SplashScreen extends JWindow
{
/**
* Numéro de série
*/
private static final long serialVersionUID = 1592663893301307318L;
private final static long TEMP_AFFICHAGE = 4000;
/**
* Constructeur par initialisation
* @param p_Frame Frame
* @param p_TempsAffichage Temps d'affichage en millisecondes
*/
public SplashScreen()
{
super(new Frame());
JLabel lblImage = new JLabel(new ImageIcon(this.getClass().getResource("/res/ui/splashScreen.jpg")));
Container container = this.getContentPane();
container.add(lblImage, BorderLayout.CENTER);
pack();
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension labelSize = lblImage.getPreferredSize();
this.setLocation(screenSize.width/2 - (labelSize.width/2), screenSize.height/2 - (labelSize.height/2));
this.setVisible(true);
try
{
Thread.sleep(TEMP_AFFICHAGE);
}
catch (InterruptedException ex)
{
ApplicationLogger.getInstance().severe(ex.getLocalizedMessage());
}
finally
{
this.setVisible(false);
}
}
}
'Thread.sleep()'は、Javaアプリケーションにメッセージの処理を停止させます。これは、UIが更新されないことを意味します。 [この回答](http://stackoverflow.com/questions/16288303/best-example-for-programmatically-creating-splashscreen-with-text)のプレミスに従って、適切に作業員を作成するのに役立ちます。 – Petesh
しかし、画像はThread.sleep()の最後の前に表示されます。また、Thread.sleep()(this.setVisible(true);)の前にイメージがロードされるため、Thread.sleep()はロードするイメージを停止すべきではありません。 – user3787028
問題の原因となっている再塗装を停止します。 UIスレッドをブロックすると、これらのことが起こります。解決策は、UIスレッド* – Petesh