我正在写客户端 - 服务器聊天应用。我已经在客户端GUI中创建了jlist,因此可以显示在线客户端。但是当创建该客户端GUI的不同对象时,jlist不显示所有客户端,即如果在一个对象中创建一个客户端,则其他对象不会显示它。 这是我的代码:
DefaultListModel model = new DefaultListModel();
static List<String> Client = new ArrayList<String>();
public GUI() {
initComponents();
}
public GUI(String hostname,int port, String user_name) throws Exception{
initComponents();
my_name = user_name;
s = new Socket("localhost", 80);
Client.add(user_name);
for(int i=0;i<Client.size();i++){
model.addElement(Client.get(i));
}
}
答案 0 :(得分:2)
Swing不是线程安全的
对Swing GUi must be done on EDT,
的所有更新 a)Socket
的输出从未通知EDT
,
b)向Item
未通知的DefaultListModel
添加新的EDT
,
c)简单的解决方法是换行代码行model.addElement(Client.get(i))
;到invokeLater()
编辑invokeLater of jlist?
,请不要参阅
SwingUtilities.invokeLater(new Runnable(){
public void run(){
model.addElement(Client.get(i));
}
});