Java 如何打开类的运行实例

Java 如何打开类的运行实例,java,chat,instance,Java,Chat,Instance,您好,我正在创建一个聊天应用程序,我在一个连接到mysql数据库的JList中有一个联系人列表。这是我的联系人列表代码 if (evt.getClickCount() == 2) { String userID = lbluserID.getText(); String selectedContact = jList1.getSelectedValue().toString(); ChatClient chatClientObject = new ChatClient(s

您好,我正在创建一个聊天应用程序,我在一个连接到mysql数据库的JList中有一个联系人列表。这是我的联系人列表代码

if (evt.getClickCount() == 2) {
    String userID = lbluserID.getText();
    String selectedContact = jList1.getSelectedValue().toString();
    ChatClient chatClientObject = new ChatClient(selectedContact, userID);  
    ChatClient.runchatClient(selectedContact, userID);
}

我遇到的问题是,当我单击联系人时,它将打开该联系人的聊天客户端,但是如果我再次单击联系人列表中的联系人,则会打开一个新的聊天客户端。如何修复此问题,以便每个用户使用相同的聊天客户端实例。

您必须监视打开的窗口(如@Code Guru的评论中所述),或者能够在运行时检查窗口是否打开。试试像这样的东西

if (evt.getClickCount() == 2) {
    String userID = lbluserID.getText();
    String selectedContact = jList1.getSelectedValue().toString();
    ChatClient chatClientObject = new ChatClient(selectedContact, userID);  
    if (!chatClientObject.isOpen())
        ChatClient.runchatClient(selectedContact, userID);
}
还是静态方法

if (evt.getClickCount() == 2) {
    String userID = lbluserID.getText();
    String selectedContact = jList1.getSelectedValue().toString();
    ChatClient chatClientObject = new ChatClient(selectedContact, userID);  
    if (ChatClient.isChatClientOpen(chatClientObject))
        ChatClient.runchatClient(selectedContact, userID);
}
您可能希望能够在创建新实例之前进行检查,可能仅基于您的2个字符串。至于实现,很难说不知道您的程序是如何构造的。您可以保留一些打开的窗口列表,也可以尝试在运行时获取窗口并解释结果


考虑到不了解全局的风险,我建议将
runchatClient
方法设置为非静态。以这种方式使用:

ChatClient chatClientObject = new ChatClient(selectedContact, userID);
chatClientObject.run();
或者至少不要进行静态调用,而是使用

ChatClient.runchatClient(ChatClient chatClientObject);

您需要保留聊天客户端的缓存以及重用它们的代码。为聊天客户端添加代码。“RealChalEclipse”是聊天客户端类中的静态方法吗?@ USSR325991如果回答了你的问题,请考虑接受它,或者如果有帮助的话,请进行投票。