【问题标题】:Java- not removing from HashMapJava-不从 HashMap 中删除
【发布时间】:2010-08-18 20:17:10
【问题描述】:

好的,所以我有这个 HashMap

private Map<String, Player> players = new HashMap<String, Player>();

这是我用来删除的:

      public void destroy() {

players.remove("Red");
os.println(me.getUsername() + "|1|has left|yes|chat");

      }

我说红色是因为它现在只是一个测试。我稍后会得到最终正确的。总之……

我用这个来检查。

  if (e.getKeyCode() == KeyEvent.VK_Q) {
            for (Player playert : players.values()) {
                                        c.append("\n < "+playert.getUsername() + " > ");
                        }
                    }

当我独自一人时..我按 Q 得到:

< Dan >

然后我的朋友 Red 登录并按 Q... 我得到:

< Dan >
< Red >

然后他离开我按 Q 我得到:

< Dan >
< Red >

那么..这怎么行不通?

另外,这是当玩家登录游戏(启动小程序)时在 init() 中调用的代码

 public void playerLogin() throws IOException {

            Random roll = new Random();
            int newNo = roll.nextInt(200);
            // me.getUsername() = "Guest #" + roll.nextInt(110);
            // String me.getUsername() = getParameter("name");

            me = new Player();
            me.setUsername(getParameter("name"));
            me.setPlayerImage(ImageIO.read(getClass().getResource("me.gif")));
            me.setX(256);
            me.setY(256);
            me.setMap(1);
            me.setCommand("move");
            players.put(me.getUsername(), me);

            repaint();

            System.out.println(me.getUsername() + " was added. player: " + me);
            os.println(me.getUsername() + "|" + me.getX() + "|" + me.getY() + "|"
                        + me.getMap() + "|" + me.getCommand());

            attack = 4;
            defense = 5;
            gold = 542;
            level = 1;
            exp = 53;

      }

【问题讨论】:

  • 您还应该发布代码,显示当他们登录时如何/何时将播放器添加到您的players 对象。
  • 以及实际调用destroy方法的代码。
  • 当用户退出小程序所在的网页时调用destory方法。我编辑了我的帖子以包含玩家登录时发生的情况
  • 没有必要因为你的问题解决了就“删除”。它可以帮助遇到类似问题的其他人。

标签: java hashmap


【解决方案1】:

换句话说,您的Applet#destroy() 方法在您期望它被调用的那一刻没有被调用?你应该使用Applet#stop()。 destroy() 仅在相关对象符合 GC 条件和/或整个浏览器实例关闭时(因此不仅是当前页面/选项卡)被调用。只要浏览器实例运行,JVM 就可以一直运行。

【讨论】:

  • 它被调用了。但它现在不起作用的原因是因为我遇到了另一个错误。坦克
  • 不过,您应该更喜欢stop()。究竟是什么问题?现在解决了吗?顺便说一句,现在我再看一遍你的代码,也许是模糊的代码,但是你是否意识到这个小程序实例根本没有在不同的访问者之间共享?
【解决方案2】:

当您点击 Q... 时,您正在检查 players 的内容,但您对 destroy() 的呼叫在哪里?您是否在代码中的任何位置显式调用destroy()?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    • 2015-11-06
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    相关资源
    最近更新 更多