JFrame中java CardLayout的奇怪问题

时间:2011-02-17 15:59:36

标签: java swing actionlistener cardlayout

你好,我有一个带有CardLayout和3张卡的Jframe。 我在第一张卡片上的按钮上有一个ActionListener。

此代码运作良好:

JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        CardLayout cl = (CardLayout)(cards.getLayout());
        cl.show(cards, "wait");
    }
}

问题是我在服务器上添加代码进行登录时(我正在开发一个xmpp客户端):

JButton btnLogin = new JButton("Login");
btnLogin.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent arg0) {
        CardLayout cl = (CardLayout)(cards.getLayout());
        cl.show(cards, "wait");
        xmppManager = new Xmpp("jabberserver", 5222);
        try {
            xmppManager.init();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
        cl.show(cards, "userList");
    }
}

基本上,当用户按下登录按钮,登录,然后显示另一张卡时,我需要显示“请稍候”的卡片。但在这种情况下,“等待”卡不会显示,它会进行登录(大约需要5秒)并直接显示最终卡“userList”。

我缺少什么?

2 个答案:

答案 0 :(得分:5)

所有代码都在Event Dispatch Thread上执行,这阻止了GUI重新绘制自身。您需要调用服务器才能在单独的线程中执行,因此您不会阻止EDT。

阅读Concurrency上Swing教程中的部分,了解更多信息和建议的解决方案。

答案 1 :(得分:1)

也许有必要在显示请稍等后触发屏幕重绘?它可能不会自动触发。