From b92a2c83b9c18db1c6c243e93f6ab323fddd5edc Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Tue, 11 Feb 2014 02:23:13 +0100 Subject: [PATCH] * Memory leaks - removed some more memory leaks for match / game handling. --- .../components/ext/dlg/DialogContainer.java | 8 ++++++++ .../client/components/ext/dlg/DialogManager.java | 7 +++++-- .../components/ext/dlg/impl/ChoiceDialog.java | 10 ++++++++++ .../java/mage/client/dialog/ShowCardsDialog.java | 10 ++++++++-- .../src/main/java/mage/client/game/GamePanel.java | 15 ++++++++++++--- .../plugins/adapters/MageActionCallback.java | 2 +- .../main/java/mage/server/game/GameWatcher.java | 11 +---------- 7 files changed, 45 insertions(+), 18 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogContainer.java b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogContainer.java index cd954f0967b..86445ea0e0d 100644 --- a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogContainer.java +++ b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogContainer.java @@ -169,6 +169,14 @@ public class DialogContainer extends JPanel { */ } + public void cleanUp() { + for (Component component:this.getComponents()) { + if (component instanceof ChoiceDialog) { + ((ChoiceDialog) component).cleanUp(); + } + } + } + @Override protected void paintComponent(Graphics g) { diff --git a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java index cfd3f4da35e..9721b8952dc 100644 --- a/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java +++ b/Mage.Client/src/main/java/mage/client/components/ext/dlg/DialogManager.java @@ -49,7 +49,7 @@ public class DialogManager extends JComponent implements MouseListener, * @param gameId */ public static void removeGame(UUID gameId) { - if (!dialogManagers.containsKey(gameId)) { + if (dialogManagers.containsKey(gameId)) { synchronized (dialogManagers) { DialogManager dialogManager = dialogManagers.get(gameId); dialogManager.cleanUp(); @@ -80,7 +80,10 @@ public class DialogManager extends JComponent implements MouseListener, public void cleanUp() { this.currentDialog = null; - this.dialogContainer = null; + if (dialogContainer != null) { + this.dialogContainer.cleanUp(); + this.dialogContainer = null; + } this.removeMouseListener(this); this.removeMouseMotionListener(this); diff --git a/Mage.Client/src/main/java/mage/client/components/ext/dlg/impl/ChoiceDialog.java b/Mage.Client/src/main/java/mage/client/components/ext/dlg/impl/ChoiceDialog.java index bdce233a917..5567d8b59c0 100644 --- a/Mage.Client/src/main/java/mage/client/components/ext/dlg/impl/ChoiceDialog.java +++ b/Mage.Client/src/main/java/mage/client/components/ext/dlg/impl/ChoiceDialog.java @@ -20,6 +20,7 @@ import javax.swing.*; import java.awt.*; import java.util.ArrayList; import java.util.UUID; +import org.mage.card.arcane.CardPanel; /** * @author mw, noxx @@ -115,6 +116,15 @@ public class ChoiceDialog extends IDialogPanel { displayCards(params.getCards(), params.gameId, params.bigCard); } + public void cleanUp() { + for (Component comp : this.getComponents()) { + if (comp instanceof CardPanel) { + ((CardPanel) comp).cleanUp(); + this.remove(comp); + } + } + } + private void displayCards(CardsView cards, UUID gameId, BigCard bigCard) { if (cards.size() == 0) { return; diff --git a/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java b/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java index 3798251b8da..e46537f935a 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/ShowCardsDialog.java @@ -34,6 +34,7 @@ package mage.client.dialog; +import java.awt.Component; import java.awt.Point; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; @@ -51,7 +52,7 @@ import mage.client.util.SettingsManager; import mage.client.util.gui.GuiDisplayUtil; import mage.view.CardsView; import mage.view.SimpleCardsView; -import org.apache.log4j.Logger; +import org.mage.card.arcane.CardPanel; /** * @author BetaSteward_at_googlemail.com @@ -70,7 +71,12 @@ public class ShowCardsDialog extends MageDialog implements MouseListener { } public void cleanUp() { - + for(Component comp: cardArea.getComponents()) { + if (comp instanceof CardPanel) { + ((CardPanel) comp).cleanUp(); + cardArea.remove(comp); + } + } } public void loadCards(String name, SimpleCardsView showCards, BigCard bigCard, CardDimensions dimension, UUID gameId, boolean modal) { diff --git a/Mage.Client/src/main/java/mage/client/game/GamePanel.java b/Mage.Client/src/main/java/mage/client/game/GamePanel.java index d2ad689add4..5529fb7ba48 100644 --- a/Mage.Client/src/main/java/mage/client/game/GamePanel.java +++ b/Mage.Client/src/main/java/mage/client/game/GamePanel.java @@ -120,6 +120,7 @@ public final class GamePanel extends javax.swing.JPanel { private final Map exiles = new HashMap(); private final Map revealed = new HashMap(); private final Map lookedAt = new HashMap(); + private final ArrayList pickTarget = new ArrayList(); private UUID gameId; private UUID playerId; private Session session; @@ -235,6 +236,10 @@ public final class GamePanel extends javax.swing.JPanel { lookedAtDialog.cleanUp(); lookedAtDialog.removeDialog(); } + for (ShowCardsDialog pickTargetDialog: pickTarget) { + pickTargetDialog.cleanUp(); + pickTargetDialog.removeDialog(); + } try { Component popupContainer = MageFrame.getUI().getComponent(MageComponents.POPUP_CONTAINER); @@ -646,14 +651,17 @@ public final class GamePanel extends javax.swing.JPanel { } public void pickTarget(String message, CardsView cardView, GameView gameView, Set targets, boolean required, Map options, int messageId) { + ShowCardsDialog dialog = null; updateGame(gameView); Map options0 = options == null ? new HashMap() : options; if (cardView != null && cardView.size() > 0) { - ShowCardsDialog dialog = showCards(message, cardView, required, options0); + dialog = showCards(message, cardView, required, options0); options0.put("dialog", dialog); } - this.feedbackPanel.getFeedback(required?FeedbackMode.INFORM:FeedbackMode.CANCEL, message, gameView.getSpecial(), options0, messageId); - + this.feedbackPanel.getFeedback(required?FeedbackMode.INFORM:FeedbackMode.CANCEL, message, gameView.getSpecial(), options0, messageId); + if (dialog != null) { + this.pickTarget.add(dialog); + } } public void inform(String information, GameView gameView, int messageId) { @@ -748,6 +756,7 @@ public final class GamePanel extends javax.swing.JPanel { PickChoiceDialog pickChoice = new PickChoiceDialog(); pickChoice.showDialog(message, choices); session.sendPlayerString(gameId, pickChoice.getChoice()); + pickChoice.removeDialog(); } public void pickPile(String message, CardsView pile1, CardsView pile2) { diff --git a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java index 9b4c8c88e73..59b4d1e80ba 100644 --- a/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java +++ b/Mage.Client/src/main/java/mage/client/plugins/adapters/MageActionCallback.java @@ -114,7 +114,7 @@ public class MageActionCallback implements ActionCallback { } private void drawArrowsForEnchantPlayers(TransferData data, Point parentPoint) { - if (data.gameId != null) { + if (data.gameId != null && MageFrame.getGame(data.gameId) != null) { for (PlayAreaPanel pa : MageFrame.getGame(data.gameId).getPlayers().values()) { PlayerPanelExt playAreaPanel = pa.getPlayerPanel(); if (playAreaPanel != null && playAreaPanel.getPlayer() != null && playAreaPanel.getPlayer().hasAttachments()) { diff --git a/Mage.Server/src/main/java/mage/server/game/GameWatcher.java b/Mage.Server/src/main/java/mage/server/game/GameWatcher.java index 6a96c534a84..274056c9382 100644 --- a/Mage.Server/src/main/java/mage/server/game/GameWatcher.java +++ b/Mage.Server/src/main/java/mage/server/game/GameWatcher.java @@ -76,16 +76,7 @@ public class GameWatcher { if (!killed) { User user = UserManager.getInstance().getUser(userId); if (user != null) { - logger.warn("before gameUpdate"); - GameView gameView = getGameView(); - logger.warn("after View"); - UUID id = game.getId(); - logger.warn("after ID"); - ClientCallback clientCallback = new ClientCallback("gameUpdate", id, gameView); - logger.warn("callback obj"); - user.fireCallback(clientCallback); - // user.fireCallback(new ClientCallback("gameUpdate", game.getId(), getGameView())); - logger.warn("after gameUpdate"); + user.fireCallback(new ClientCallback("gameUpdate", game.getId(), getGameView())); } } }