приведенный ниже код представляет собой реализацию заставки для небольшого приложения Java, которое я разработал с помощью Eclipse. Заставка отлично работает на ПК, но не на MAC. В MAC OSX сначала появляется кадр с серой областью в течение 2 секунд, а затем изображение появляется в течение оставшихся 4 секунд. Изображение должно появляться сразу и в течение 4 секунд. У вас есть идея, почему есть задержка до появления изображения на MAC, пока все работает хорошо на ПК? PS: Я развернул приложение как исполняемый Jar, и я использую Java 8 на всех компьютерах. Спасибо.Java-заставка не работает на Mac OSX, но работает на ПК
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-приложение прекратить обработку сообщений; что означает, что пользовательский интерфейс не обновляется. Следуйте посылке в [этом ответе] (http://stackoverflow.com/questions/16288303/best-example-for-programmatically-creating-splashscreen-with-text), который должен помочь вам в надлежащем создании рабочего. – Petesh
Но изображение появляется до конца Thread.sleep(). И Thread.sleep() не должен останавливать загрузку изображения, потому что изображение загружается до Thread.sleep() (this.setVisible (true);). – user3787028
Он останавливает репликации, что и вызывает проблему. Когда вы блокируете поток пользовательского интерфейса, это происходит. Решение состоит в том, чтобы: * не блокировать поток пользовательского интерфейса * – Petesh