嗨,我正在创建一个聊天应用程序,我有一个联系人列表中的JList,这是连接到mysql数据库。这是我的联系人列表的代码;
if (evt.getClickCount() == 2) {
String userID = lbluserID.getText();
String selectedContact = jList1.getSelectedValue().toString();
ChatClient chatClientObject = new ChatClient(selectedContact, userID);
ChatClient.runchatClient(selectedContact, userID);
}我遇到的问题是,当我单击一个联系人时,它将打开该联系人的聊天客户端,但是,如果我再次单击联系人列表中的联系人,则会打开一个新的聊天客户端。我如何解决这个问题,以便每个用户都使用相同的聊天客户端实例。
发布于 2014-05-16 10:20:04
您必须监视打开的窗口(如@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.runchatClient(ChatClient chatClientObject);https://stackoverflow.com/questions/23690203
复制相似问题