gpt4 book ai didi

java - JFrame 中 java CardLayout 的奇怪问题

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:55:52 30 4
gpt4 key购买 nike

你好,我有一个带有 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”。

我错过了什么?

最佳答案

所有代码都在事件调度线程上执行,这会阻止 GUI 重新绘制自身。您需要对服务器的调用在单独的线程中执行,这样您就不会阻塞 EDT。

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

关于java - JFrame 中 java CardLayout 的奇怪问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5031355/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com