Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 列表更新不正确?_Java_List - Fatal编程技术网

Java 列表更新不正确?

Java 列表更新不正确?,java,list,Java,List,我一直在关注切诺的网络聊天编程教程,我几乎完成了,只是在遇到问题时修复了错误。我有一个按钮,可以打开一个窗口,其中应该列出所有已连接用户的列表。但是,每次我测试它时,列表上唯一的一项就是连接到该服务器实例的第一个人。这对于所有其他连接的用户也是一样的。我的代码中没有错误,而且看起来都是正确的。我似乎找不到错误 这个函数是从一个whilerunning循环中调用的,其中的其他所有东西都在不断地工作,所以我不认为这有什么问题 private void sendStatus() { i

我一直在关注切诺的网络聊天编程教程,我几乎完成了,只是在遇到问题时修复了错误。我有一个按钮,可以打开一个窗口,其中应该列出所有已连接用户的列表。但是,每次我测试它时,列表上唯一的一项就是连接到该服务器实例的第一个人。这对于所有其他连接的用户也是一样的。我的代码中没有错误,而且看起来都是正确的。我似乎找不到错误

这个函数是从一个whilerunning循环中调用的,其中的其他所有东西都在不断地工作,所以我不认为这有什么问题

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);
}