为什么我的java方法被调用了两次?

时间:2015-02-28 16:40:27

标签: java

这是两次调用的代码:

    public static DefaultListModel getFriends(int nameOrUser) {
    try {
        Friend[] allFriends = Skype.getContactList().getAllFriends();

        System.out.println("Skype contact list lenght: " + allFriends.length);

        for (Friend friend : allFriends) {
            String fullName = friend.getFullName();
            String userName = friend.toString();
            if (fullName.isEmpty()) {
                fullName = friend.getId();
            }
            fullListModel.addElement(fullName);
            userListModel.addElement(userName);
        }
    } catch (SkypeException ex) {
        Logger.getLogger(Utils.class.getName()).log(Level.SEVERE, null, ex);
    }
    if (nameOrUser == 0) {
        return fullListModel;
    } else if (nameOrUser == 1) {
        return userListModel;
    } else {
        System.out.println("You must specify a valid data type.");
    }

    return null;
}

问题在于,当我将其分配给jList时,jList包含两次联系人列表:/

希望我解释得很好,对不起,如果我的英语不好。

编辑:

这是调用代码:

fullList.setModel(Utils.getFriends(0));

1 个答案:

答案 0 :(得分:1)

您编写的方法getFriends()似乎有两种相互矛盾的方式:

  1. 只要您需要引用ListModel之一(即可能多次,在您的具体情况下,可能至少2次),就会被调用
  2. 只能被召唤一次,
  3. 这部分是因为它做了两件不同的事情:

    1. 填充ListModel s
    2. 返回对ListModel s
    3. 之一的引用

      您可以通过将这两个事物分成不同的方法来解决您的问题,例如:

      public static void populateFriends() {
          // ... add the friends into the list model ...
      }
      
      public static DefaultListModel getFriends(int nameOrUser) {
          if (nameOrUser == 0) {
              return fullListModel;
          } else if (nameOrUser == 1) {
              return userListModel;
          } else {
              // ...
      }
      

      如果您想将好友添加到ListModel,请致电populateFriends()。如果您想获得ListModel引用,请致电getFriends()

      另外,我建议在添加朋友之前让populateFriends()清除ListModel s(使用.clear())。通过这种方式,您可以多次调用它,并且每次刷新列表,而不是复制它们。