Отображение JWindow в потоке диспетчеризации событий - PullRequest
1 голос
/ 08 октября 2010

То, что я пытаюсь сделать, - это показать небольшой всплывающий экран во время загрузки моей программы.Вот что у меня есть:

SplashScreen.showSplashScreen();
// Do stuff that takes time.
SplashScreen.hideSplashScreen();

Все, что делает метод showSplashScreen (), это создает новое JWindow в середине экрана и делает его видимым.

Теперь этот код вызывается изпоток диспетчеризации событий, поэтому, когда вызывается метод showSplashScreen (), я не вижу JWindow до тех пор, пока поток не завершится, что к тому времени мне больше не нужно, чтобы окно было больше.Как лучше всего показывать этот экран-заставку, пока я жду?

Ответы [ 2 ]

4 голосов
/ 08 октября 2010

Не уверен, что это «лучший способ», но механизм, который я использовал ранее, заключается в том, чтобы выполнить инициализацию в потоке, отличном от EDT, но показать заставку с помощью SwingUtilities.invokeAndWait,Таким образом, вы по крайней мере увидите экран-заставку, даже если ваша инициализация быстрая (если вы этого хотите).

Итак, в потоке инициализации вы идете:

SwingUtilities.invokeAndWait( /* Runnable to show splash screen */ );

// Do stuff that takes time.

SwingUtilities.invokeLater( /* Hide splash screen, display main GUI */ );
0 голосов
/ 08 октября 2010

Существует класс java.awt.SplashScreen, который был представлен в 1.6, пробовал использовать это?

...