首页 > 解决方案 > 为什么将 ArrayList 传递给其他班级后它是空的?

问题描述

我一直在做一个聊天室项目,我试图用另一个类的 ArrayList 填充 GUI 的一部分,我试图使用 JList 和 JTextArea 但由于某种原因,我的 ArrayList 总是一旦它被传递到下一个班级,就为空。我已经被困了几天了,我研究了很多,经历了许多类似的线程,但没有找到我的答案。

服务器类

    private static ArrayList<ClientInfo> clients = new ArrayList<ClientInfo>();
    private static ArrayList<String> membersList = new ArrayList<String>();
    

    public static void memberlist() {
        for (ClientInfo userName : clients) {
            if (!membersList.contains(userName.getName())) {
                membersList.add(userName.getName());
            }
        }
    }
    
    public ArrayList<String> getMembers() {
        System.out.println("This was called from another class");
        return membersList;
    }

            clients.add(new ClientInfo(name, ClientID++, packet.getAddress(), packet.getPort()));
            memberlist();

所以我有一个客户 ArrayList,但我需要一个只包含用户名的列表,所以我创建了另一个名为 membersList 的 ArrayList,在此我使用 for 循环将名称从客户列表中取出并将它们放入我的新列表中,然后我创建了一个getter 方法应该返回这些名称。

最后一点是在同一个类中的一个单独的方法中,它在我调用 memberlist 方法之后添加客户端信息。

客户端窗口类

    private static JTextArea membersList = new JTextArea();


        Server members = new Server();
        membersList.setEditable(false);
        membersList.append(members.getMembers() + "\n");
        System.out.println(membersList);

在我的 GUI 类中,我创建了一个 JTextArea 并尝试使用 ArrayList getter 方法填充它,但是一旦将它传递给我的 GUI 类,arraylist 总是为空的,我之前使用 JList 来执行此操作,我得到了完全相同的结果,然后我的朋友告诉我列表是空的,因为我使用 .toArray 来转换 ArrayList。该列表在服务器类中打印时始终包含用户名,但一旦到达 ClientWindow 类,它就是空的。所以我尝试使用 JTextArea 以为我解决了问题,但列表再次为空。

以前的 JList 代码

    private JList<String> activeMembers;

        Server members = new Server();
        activeMembers = new JList<String>(members.getMembers().toArray(new String[0]));
        activeMembers.setVisibleRowCount(4);
        activeMembers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

任何帮助将不胜感激,我在这个网站上的第一篇文章,所以如果我有任何不清楚的地方,我很抱歉。(ps:对编码也很陌生)

标签: javaarraylist

解决方案


推荐阅读