我正在尝试使用弹出式登录框创建登录系统,我希望用户在执行任何其他操作之前必须输入其凭据(或单击取消)。不幸的是,将modal设置为True然后使用setVisible()调用该框将导致该对话框阻止任何底层线程。这是不利的,因为它们可能是某种底层数据集合,应该在登录过程中继续运行。有没有办法让登录框模态和&没有创建任何其他线程的非阻塞?
编辑:根据要求,这是演示应用程序中的一些代码:
loginButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
login.showLogin();
if (login.isLoggedIn()) {
loginButton.setEnabled(false);
}
if (!logoutButton.isEnabled()) {
logoutButton.setEnabled(true);
}
}
});
showLogin()方法只是对setVisible()的调用。用户输入用户名和密码后,机制会检查用户是否使用isLoggedIn()方法成功登录。如果调用是非阻塞的,则此代码将直接运行,而无需先等待对用户进行身份验证。我甚至在IntelliJ调试器中检查过它,if语句在用户点击登录或取消之前不会执行。