繁体   English   中英

Java-不从HashMap中删除

[英]Java- not removing from HashMap

好,所以我有这个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;

      }

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

当您按下Q ...时,您正在检查players的内容,但是对destroy()调用在哪里? 您是否在代码中的任何地方显式调用destroy()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM