感谢您的所有答复!这是我的代码!请发表您的评论! 我创建了一个列来保存USER的当前状态
ShareHelper.USER = nhanVien;//use static variable to save USER
if (ShareHelper.USER.getStatus() == 0) {//first login -> change status from 0 to 1
DialogHelper.alert(this, "Đăng nhập thành công!");
nvd.updateStatus(1, nhanVien.getMaNV());
this.dispose();
EduSys edu = new EduSys();
edu.setVisible(true);
} else if (ShareHelper.USER.getStatus() == 1) { //if someone logged before -> allow to login again
DialogHelper.alert(this, "Đăng nhập thành công!");
EduSys edu = new EduSys();
edu.setVisible(true);
nvd.updateStatus(2, nhanVien.getMaNV());//then update status to 2
this.dispose();
}
在MainFrame中,我使用一个线程来连续更新状态
Thread t1 = new Thread(new Runnable() {//use Thread to check if status change to 2-> someone logs in with same account
@Override
public void run() {
while (true) {
model.NhanVien nhanVien = nvd.findById(ShareHelper.USER.getMaNV());
ShareHelper.USER = nhanVien;
if (ShareHelper.USER.getStatus() == 2) {
DialogHelper.alert(EduSys.this, "Có người đã đăng nhập tài khoản này!");
ShareHelper.logoff();//log out the present session
nvd.updateStatus(1, ShareHelper.USER.getMaNV());//change status to 1 again
EduSys.this.dispose();
dn.setVisible(true);
}
}
}
});
t1.start();
但是我遇到了麻烦!当我第二次登录时,我在上一个会话和当前会话中都被踢了,因为“状态”已由上一个会话更改为2,所以当前会话也收到该值。有人可以帮我解决这个问题!预先谢谢你!
答案 0 :(得分:0)
您可以采用一种简单的方法。首先创建应用程序级别的简单缓存(一个简单的has map将起作用),该缓存将维护用户的状态。如果用户是首次登录,请使用登录值(即USER-> 1)为用户创建条目,然后在DB中相应地更新字段。 现在,如果用户尝试再次登录,请在地图上检查是否已登录的条目(如果其已经登录,则更改地图和DB中的值,并终止该用户的所有会话
谢谢 TG