好的,所以我有这个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");
}
我说Red,因为它现在只是一个TEST。我稍后会得到最终正确的。反正...
我用这个来检查。
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;
}
答案 0 :(得分:2)
换句话说,在您预期调用时,您的Applet#destroy()
方法未被调用?您应该使用Applet#stop()
。仅当有问题的对象符合GC和/或整个浏览器实例已关闭时(因此不仅是当前页面/选项卡),才会调用destroy()
。只要浏览器实例运行,JVM就可以继续运行。
答案 1 :(得分:1)
当您点击Q ...时,您正在检查players
的内容,但您对destroy()
的电话是在哪里?您是否在代码中的任何位置明确致电destroy()
?