아래 코드는 Eclipse로 개발 한 작은 Java 응용 프로그램 용 스플래시 화면 구현입니다. 스플래시 화면은 PC에서는 완벽하게 작동하지만 MAC에서는 제대로 작동하지 않습니다. MAC OSX에서 프레임이 처음 나타나는 것은 2 초 동안 회색 영역이 나타나고 나머지 4 초 동안 이미지가 나타납니다. 이미지는 일반적으로 곧바로 4 초 동안 나타납니다. PC에서 모든 것이 잘 작동하는 동안 MAC에 이미지가 나타나기까지 지연되는 이유는 무엇입니까? 추신 : 실행 가능한 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