invalid_login_label.setVisible(false);
username_label.setVisible(false);
user_field.setVisible(false);
password_label.setVisible(false);
pass_field.setVisible(false);
access_granted_label.setVisible(true);
Thread.sleep(1000);
this.dispose();
世界你好!我是java的新手,我正在使用netbeans,所以我的jframe中有这段代码。我想要做的是在系统对用户进行身份验证之后。它将删除所有字段的可见性,并显示 1000mills 的“已授予访问权限”,但它开始延迟,但仍然不会删除字段的可见性。
最佳答案
Thread.sleep
就是这样做的,它导致当前线程 hibernate 。在这种情况下,我假设这一切都是在事件调度线程的上下文中完成的,这意味着它无法更新屏幕,因为您已阻止它处理新事件,例如重绘事件。
Swing 是单线程环境,也就是说,对 UI 状态的所有交互和修改都应该在事件调度线程的上下文中发生。任何阻塞该线程的因素(例如扩展 I/O、长时间运行的循环或 Thread.sleep)都将阻止 EDT 处理新事件和更新屏幕,使您的应用程序看起来就像已卡住一样。 ..
改用 Swing 计时器
例如...
invalid_login_label.setVisible(false);
username_label.setVisible(false);
user_field.setVisible(false);
password_label.setVisible(false);
pass_field.setVisible(false);
access_granted_label.setVisible(true);
javax.swing.Timer timer = new javax.swing.Timer(1000, new ActionListener() {
public void actionListener(ActionEvent evt) {
dispose();
}
});
timer.setRepeats(false);
timer.start();
关于java - Thread.sleep(long mills) 也延迟了以前的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23772951/