gpt4 book ai didi

java - 用于关闭 JFrame 并使用全局变量的 WindowListener

转载 作者:行者123 更新时间:2023-12-01 13:51:39 24 4
gpt4 key购买 nike

我正在努力使用 WindowListener 来关闭 JFrame。

我遇到一种情况,客户端登录到服务器,当客户端关闭其应用程序时,需要通知服务器。因此,为了通知服务器,应该处理类的另一个实例(处理 rmi 实现)。该实例是我的 GUI 类中的全局变量。

我在网上搜索了一下,但我所能解决的问题就是以下结构

addWindowListener(new WindowAdapter() 
{
public void windowClosed(WindowEvent e)
{
System.out.println("jdialog window closed event received");
}

public void windowClosing(WindowEvent e)
{
System.out.println("jdialog window closing event received");
}
});

这里的问题是我无法使用全局变量。谁能帮我解决这个问题?

最佳答案

过去,当我遇到同样的问题时,我决定实现 Singleton pattern保持用户当前 session 的“全局”。这样我就可以访问我需要的任何类(class)中的当前 session 。

应该是这样的:

public class SessionManager {

private static SessionManager instance;
private Session currentSession; // this object holds the session data (user, host, start time, etc)

private SessionManager(){ ... }

public static SessionManager getInstance(){
if(instance == null){
instance = new SessionManager();
}
return instance;
}

public void startNewSession(User user){
// starts a new session for the given User
}

public void endCurrentSession(){
// here notify the server that the session is being closed
}

public Session getCurrentSession(){
return currentSession;
}
}

然后我在 windowClosing() 方法中调用 endCurrentSession() ,如下所示:

public void windowClosing(WindowEvent e) {
SessionManager.getInstance().endCurrentSession();
}

注意:在此调用此方法将在 Event Dispatch Thread 中执行导致 GUI“卡住”,直到此方法完成。如果您与服务器的交互需要很长时间,您需要在单独的线程中进行。

关于java - 用于关闭 JFrame 并使用全局变量的 WindowListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19908476/

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