Java - не удаляется из HashMap - PullRequest
       3

Java - не удаляется из HashMap

1 голос
/ 19 августа 2010

ОК, поэтому у меня есть этот 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 >

тогда мой друг Ред входит в систему и я нажимаю 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;

      }

Ответы [ 2 ]

2 голосов
/ 19 августа 2010

Другими словами, ваш Applet#destroy() метод не вызывается в тот момент, когда вы ожидаете его вызова?Вы должны использовать Applet#stop().destroy() вызывается только тогда, когда рассматриваемый объект имеет право на сборщик мусора и / или когда весь экземпляр браузера закрыт (и, следовательно, не только текущая страница / вкладка).JVM может продолжать работать до тех пор, пока работает экземпляр браузера.

1 голос
/ 19 августа 2010

Когда вы нажимаете Q ... вы проверяете содержимое players, но где ваш звонок на destroy()?Вы явно вызываете destroy() где-нибудь в своем коде?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...