Java 列表更新不正确?
我一直在关注切诺的网络聊天编程教程,我几乎完成了,只是在遇到问题时修复了错误。我有一个按钮,可以打开一个窗口,其中应该列出所有已连接用户的列表。但是,每次我测试它时,列表上唯一的一项就是连接到该服务器实例的第一个人。这对于所有其他连接的用户也是一样的。我的代码中没有错误,而且看起来都是正确的。我似乎找不到错误 这个函数是从一个whilerunning循环中调用的,其中的其他所有东西都在不断地工作,所以我不认为这有什么问题Java 列表更新不正确?,java,list,Java,List,我一直在关注切诺的网络聊天编程教程,我几乎完成了,只是在遇到问题时修复了错误。我有一个按钮,可以打开一个窗口,其中应该列出所有已连接用户的列表。但是,每次我测试它时,列表上唯一的一项就是连接到该服务器实例的第一个人。这对于所有其他连接的用户也是一样的。我的代码中没有错误,而且看起来都是正确的。我似乎找不到错误 这个函数是从一个whilerunning循环中调用的,其中的其他所有东西都在不断地工作,所以我不认为这有什么问题 private void sendStatus() { i
private void sendStatus() {
if (clients.size() <= 0) return;
String users = "/u/";
for (int i = 0; i < clients.size() - 1; i++) {
users += clients.get(i).name + "/n/";
}
users += clients.get(clients.size() - 1).name + "/e/";
sendToAll(users);
}
然后这是处理它的图形的peice,我看不出有任何错误,但无论如何我会包括它,以防万一。谢谢大家
private JPanel contentPane;
private JList list;
public OnlineUsers() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(200, 320);
setLocationRelativeTo(null);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{0, 0};
gbl_contentPane.rowHeights = new int[]{0, 0};
gbl_contentPane.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{1.0, Double.MIN_VALUE};
contentPane.setLayout(gbl_contentPane);
list = new JList();
GridBagConstraints gbc_list = new GridBagConstraints();
gbc_list.fill = GridBagConstraints.BOTH;
gbc_list.gridx = 0;
gbc_list.gridy = 0;
JScrollPane p = new JScrollPane();
p.setViewportView(list);
contentPane.add(p, gbc_list);
list.setFont(new Font("Verdana", 0, 14));
}
public void update(String[] users) {
list.setListData(users);
}
还是没有主意。我甚至还检查了指导人员编写的源代码和它是一样的。我非常感谢你的帮助,因为我14岁,正在学习java。碰撞
您能否给出一个失败的测试用例……我的建议是,如果您知道如何在IDE中使用调试器,请在String[]u=message.split/u/|/n/|/e/之后放置一个println或断点,并检查u数组是否真的包含您期望的内容。对你来说,调试应用程序比这里的人更容易:-我试过了,它给了我一些奇怪的东西,比如[L Java.Lang.String@7e37843或类似的东西。这对我一点帮助都没有。@jmaster2013您可以使用System.out.printlnArrays.toString;来获取实际值,而不是打印对象引用的数组的Java默认toString。@PawełChorążyk我这样做了,但它仍然是第一人称。因此,我在它出现错误之前就知道了这是列表,对吗?问题是我还得到了客户机数组中有多少个客户机的计数,这是正确的,我添加了一个控制台命令来查看客户机,并且有正确数量的客户机。
private JPanel contentPane;
private JList list;
public OnlineUsers() {
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(200, 320);
setLocationRelativeTo(null);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
GridBagLayout gbl_contentPane = new GridBagLayout();
gbl_contentPane.columnWidths = new int[]{0, 0};
gbl_contentPane.rowHeights = new int[]{0, 0};
gbl_contentPane.columnWeights = new double[]{1.0, Double.MIN_VALUE};
gbl_contentPane.rowWeights = new double[]{1.0, Double.MIN_VALUE};
contentPane.setLayout(gbl_contentPane);
list = new JList();
GridBagConstraints gbc_list = new GridBagConstraints();
gbc_list.fill = GridBagConstraints.BOTH;
gbc_list.gridx = 0;
gbc_list.gridy = 0;
JScrollPane p = new JScrollPane();
p.setViewportView(list);
contentPane.add(p, gbc_list);
list.setFont(new Font("Verdana", 0, 14));
}
public void update(String[] users) {
list.setListData(users);
}