0

我有一个应用程序,在成功登录后(在 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());
   //..
}

我该如何解决这个问题,以便更新图像并在“背景”中创建用户界面?

4

0 回答 0