从组合框(聊天客户端)创建聊天时,GUI(客户端)冻结

时间:2018-12-04 19:33:23

标签: java multithreading combobox

我正在创建一个聊天客户端,其中包含一个服务器类(主类)和一个客户端类(启动一个客户端并连接到服务器)。

然后,现在我尝试在将客户端连接到服务器之前添加带有联系人的组合框,因此我为Combobox创建了一个新类,其中包含actionListener和actionPerformed来在按下联系人时打开客户端。问题是打开的客户端正在运行(通过Server进行消息传递时看到打印输出),但是客户端GUI呈灰色且冻结(例如程序未响应时)。在我进行dispose()之前,组合框也存在同样的问题。

所以我目前对线程编码还很陌生,但是我对问题的理解(可能是错误的)是,在comboBoxClass中使用的Swing组件线程用于在comboBox中创建和单击联系人。然后,当我在comboBoxClass中创建新的Client时,我已经在其中使用了Swingthread,并且Client将无法使用“足够”的线程。不知道该怎么想,但这是我的结论。

这也是整个代码的链接:https://pastebin.com/mNeBFn7q (使用4个文本文件,因此没有它们将无法运行,但您会看到完整的结构)。

};
class comboBoxClass {

 public comboBoxClass() {

     String[] favContacts = {
    "BigKarlos",
    "lilVillz",
    "metaforMatte",
    "BirkoStoteles",
    "Övriga Kontakter!!"

JComboBox contactList = new JComboBox(favContacts);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(300, 100);
    Container cont = frame.getContentPane();
    cont.setLayout(new FlowLayout());
    cont.add(contactList);
    frame.setVisible(true);

    contactList.addActionListener(
            new ActionListener() {

                public void actionPerformed(ActionEvent e) {
                    //contactList.addActionListener(this);

          ArrayList<String> arrayList = readFile();
            contentArr = new String[arrayList.size()];
            arrayList.toArray(contentArr);



            if (contactList.getSelectedIndex() == 0) {
                port = contentArr[4];
                IP = contentArr[5];
            }
            if (contactList.getSelectedIndex() == 1) {
                port = contentArr[7];
                IP = contentArr[8];
            }
            if (contactList.getSelectedIndex() == 2) {
                port = contentArr[1];
                IP = contentArr[2];
            }
            if (contactList.getSelectedIndex() == 3) {
                port = contentArr[10];
                IP = contentArr[11];

            }
            if (contactList.getSelectedIndex() == 4) {

             JFileChooser contactChooser = new JFileChooser("/Users/kasperknudsen/Documents/Chatten");
             contactChooser.getFileFilter();
             contactChooser.showOpenDialog(frame); 


            }

            frame.dispose();
            Client kontakt = new Client(IP,Integer.parseInt(port));

        }

    });

}

0 个答案:

没有答案