你好,我有一个带有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”。
我缺少什么?
答案 0 :(得分:5)
所有代码都在Event Dispatch Thread上执行,这阻止了GUI重新绘制自身。您需要调用服务器才能在单独的线程中执行,因此您不会阻止EDT。
阅读Concurrency上Swing教程中的部分,了解更多信息和建议的解决方案。
答案 1 :(得分:1)
也许有必要在显示请稍等后触发屏幕重绘?它可能不会自动触发。