Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当同一帐户再次登录时,是否自动将用户踢出?_Java_Sql Server_Swing - Fatal编程技术网

Java 当同一帐户再次登录时,是否自动将用户踢出?

Java 当同一帐户再次登录时,是否自动将用户踢出?,java,sql-server,swing,Java,Sql Server,Swing,谢谢你的回复!这是我的密码!请给出您的评论! 我创建了一个列来保存用户的当前状态 ShareHelper.USER = nhanVien;//use static variable to save USER if (ShareHelper.USER.getStatus() == 0) {//first login -> change status from 0 to 1 DialogHelper.alert(t

谢谢你的回复!这是我的密码!请给出您的评论! 我创建了一个列来保存用户的当前状态

    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();
                }
在大型机中,我使用一个线程连续更新状态

    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,然后当前会话也会收到该值。有人能帮我修一下吗!提前谢谢你

你可以有一个简单的方法。首先创建应用程序级简单缓存(简单的has映射将起作用),它将维护用户的状态。如果用户首次登录,则使用登录值(即user->1)为用户创建条目,并相应地更新数据库中的字段。 现在,如果用户试图再次登录,请在map中检查条目(如果已经登录),更改map和DB中的值,并终止该用户的所有会话

谢谢
TG

请添加您迄今为止尝试过的代码。为什么不让应用程序无法再次启动?其他用户将您的问题标记为质量低下,需要改进。我对您的输入进行了重新措辞/格式化,使其更易于阅读/理解。请查看我的更改,以确保它们反映您的意图。但我认为你的问题仍然无法回答。你现在应该回答你的问题,使之更具体/清楚(见)。如果您还有其他问题或反馈,请随时给我留言。我同意您的看法:您的问题实在太广泛了。我们不会为您设计解决方案,我们会帮助您解决特定的编程问题@Stultuske如果有人忘记注销,那么他们就不能在其他任何地方登录!