Java-不从 HashMap 中删除

发布于 2024-09-15 16:22:08 字数 1900 浏览 3 评论 0原文

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

      }

OK so I have this HashMap

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

Here is what I use to remove:

      public void destroy() {

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

      }

I say Red because it's just a TEST right now. I will get the eventual correct one later. Anyways...

I use THIS to check.

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

When I'm all by myself.. I press Q and I get:

< Dan >

then my friend Red logs in and I Press Q... I get:

< Dan >
< Red >

then he leaves I press Q and I get:

< Dan >
< Red >

So.. how come this isn't working?

Also, here is the code that gets called in init() when a player logs in the game (starts the applet)

 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;

      }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

栖迟 2024-09-22 16:22:08

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

In other words, your Applet#destroy() method is not called at the moment you expect it is called? You should use Applet#stop(). The destroy() is only called when the object in question is eligible for GC and/or when the whole browser instance is been closed (and thus not only the current page/tab). JVM may namely keep running as long as the browser instance runs.

风筝有风,海豚有海 2024-09-22 16:22:08

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

When you hit Q... you are checking the contents of players but where is your call to destroy()? Do you explicitly call destroy() anywhere in your code?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文