【问题标题】:how to open running instance of a class如何打开一个类的正在运行的实例
【发布时间】:2014-05-15 23:11:21
【问题描述】:

您好,我正在创建一个聊天应用程序,我在连接到 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);
}

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

【问题讨论】:

  • 您需要保留聊天客户端的缓存以及重复使用它们的代码。
  • 为 ChatClient 添加代码。 “runchatClient”是 ChatClient 类中的静态方法吗?

标签: java chat instance


【解决方案1】:

您必须监视打开的窗口(如 @Code-Guru 在 cmets 中所述),或者能够在运行时检查窗口是否打开。尝试类似

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.runchatClient(ChatClient chatClientObject);

【讨论】:

  • @user3252991 如果这回答了您的问题,请考虑接受它,或者如果它有帮助,请点赞。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-03
  • 1970-01-01
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 2020-10-25
相关资源
最近更新 更多