我有一个应用程序,在成功登录后(在 a 上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());
//..
}
我该如何解决这个问题,以便更新图像并在“背景”中创建用户界面?