Изображение счетчика на JFrame во время создания пользовательского интерфейса
У меня есть приложение, которое после успешного входа в систему (на JFrame
), начинает создавать основной кадр (класс MainUI
который простирается от JFrame
). Тот MainUI
класс содержит JTabbedPane
(который каждая вкладка является классом, который простирается от JPanel
) и, на setVisible
метод, создает и показывает каждую вкладку.
Я хочу добавить в форму входа после успешного входа изображение Spinner, чтобы указать, что MainUI
создается
После отображения изображения Spinner я вызываю создание MainUI
и позвонить setVisible
метод на EventQueue.invokeLater();
но изображение Spinner не обновляется. Если я использую new Thread(runner).start();
обновляется, но я получаю много Component creation must be done on Event Dispatch Thread
Некоторый код Login.java:
buttonLogin.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
login();
}
});
private void login()
{
//check DB and permissions
//if all is ok
lMsj.setIcon(spinner);
new Thread(new Runnable() {
public void run() {
showMainUI(usr);
}
}).start();
}
private void showMainUI(final Usuario usr)
{
Runnable runner = new Runnable() {
public void run() {
final MainUI mui = new MainUI();
mui.setVisible(true);
dispose();
}
};
EventQueue.invokeLater(runner);
}
и некоторый код MainUI.java
public MainUI()
{
SwingUtilities.invokeLater(new Runnable() {
@Override public void run() {
setMinimumSize(new Dimension(1280, 960));
createComponents();
}
});
}
private void initComponents()
{
//..
// menuItem = new ...
// ...
}
@Override
public void setVisible(boolean value)
{
//..
if (Security.get().isAllowed("tab1")){
addTab1();
}
//..
}
private void addTab1(){
//..
getTabbedPane().addTab("Tab1", new Tab1());
//..
}
Как я могу это исправить, чтобы изображение обновлялось, а пользовательский интерфейс создавался в "фоне"?