From df9c2007538c14529eb9c4591f3f95307e317c3b Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 6 Feb 2014 18:00:45 +0100 Subject: [PATCH] * Memory handling - some more changes to improve object deallocation. --- .../java/mage/client/cards/CardsList.java | 19 ++++++++++++++- .../mage/client/deckeditor/CardSelector.java | 2 +- .../java/mage/client/deckeditor/DeckArea.java | 6 ++--- .../client/deckeditor/DeckEditorPanel.java | 10 ++++---- .../viewer/CollectionViewerPanel.java | 8 +++++-- .../java/mage/client/draft/DraftPanel.java | 2 +- .../plugins/adapters/MageActionCallback.java | 24 +++++++++++-------- .../java/org/mage/card/arcane/CardPanel.java | 2 ++ 8 files changed, 51 insertions(+), 22 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/cards/CardsList.java b/Mage.Client/src/main/java/mage/client/cards/CardsList.java index e3298a580b9..210394c144a 100644 --- a/Mage.Client/src/main/java/mage/client/cards/CardsList.java +++ b/Mage.Client/src/main/java/mage/client/cards/CardsList.java @@ -59,6 +59,7 @@ import mage.client.util.*; import mage.client.util.Event; import mage.view.CardView; import mage.view.CardsView; +import org.mage.card.arcane.CardPanel; /** * @@ -84,14 +85,30 @@ public class CardsList extends javax.swing.JPanel implements MouseListener, ICar initListViewComponents(); } - public void clear() { + public void cleanUp() { this.clearCardEventListeners(); if (cards != null) { cards.clear(); } if (mainModel != null) { + mainModel.removeTableModelListener(mainTable); mainModel.clear(); } + if(mainTable != null) { + for(MouseListener ml: mainTable.getMouseListeners()) { + mainTable.removeMouseListener(ml); + } + } + if (currentView != null) { + currentView.clearCardEventListeners(); + } + for (Component comp :cardArea.getComponents()) { + if (comp instanceof CardPanel) { + ((CardPanel)comp).cleanUp(); + } + } + cardArea.removeAll(); + this.bigCard = null; } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java index 110b778371b..fb2144447f5 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/CardSelector.java @@ -164,7 +164,7 @@ public class CardSelector extends javax.swing.JPanel implements ComponentListene * Free all references * */ - public void clear() { + public void cleanUp() { this.cardGrid.clear(); this.mainModel.clear(); } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java index 0d157b40237..eed9258c5ac 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckArea.java @@ -60,9 +60,9 @@ public class DeckArea extends javax.swing.JPanel { sideboardList.setDisplayNoCopies(true); } - public void clear() { - deckList.clear(); - sideboardList.clear(); + public void cleanUp() { + deckList.cleanUp(); + sideboardList.cleanUp(); } public void showSideboard(boolean show) { diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java index 671962087a8..602cb870695 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/DeckEditorPanel.java @@ -61,6 +61,7 @@ import mage.client.constants.Constants.DeckEditorMode; import mage.client.constants.Constants.SortBy; import mage.client.dialog.AddLandDialog; import mage.client.dialog.PreferencesDialog; +import mage.client.plugins.MagePlugins; import mage.client.plugins.adapters.MageActionCallback; import mage.client.plugins.impl.Plugins; import mage.client.util.Event; @@ -123,7 +124,7 @@ public class DeckEditorPanel extends javax.swing.JPanel { } /** - * Free resources so GC can work + * Free resources so GC can remove unused objects from memory */ public void cleanUp() { if (updateDeckTask != null) { @@ -137,9 +138,10 @@ public class DeckEditorPanel extends javax.swing.JPanel { countdown.removeActionListener(al); } } - this.cardSelector.clear(); - this.deckArea.clear(); - this.getUI().uninstallUI(this); + this.cardSelector.cleanUp(); + this.deckArea.cleanUp(); + this.remove(bigCard); + this.bigCard = null; ((MageActionCallback) Plugins.getInstance().getActionCallback()).setCardPreviewComponent(null); } diff --git a/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPanel.java b/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPanel.java index 1985595db51..b22a59dd37e 100644 --- a/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPanel.java +++ b/Mage.Client/src/main/java/mage/client/deckeditor/collection/viewer/CollectionViewerPanel.java @@ -71,6 +71,11 @@ public final class CollectionViewerPanel extends JPanel { } } + public void cleanUp() { + this.hidePopup(); + this.bigCard = null; + } + public void initComponents() { jPanel1 = new javax.swing.JPanel(); jPanel1.setOpaque(false); @@ -210,8 +215,7 @@ public final class CollectionViewerPanel extends JPanel { } public void removeCollectionViewer() { - hidePopup(); - + this.cleanUp(); Component c = this.getParent(); while (c != null && !(c instanceof CollectionViewerPane)) { c = c.getParent(); diff --git a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java index 1b6629f3c5a..a22b150365e 100644 --- a/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java +++ b/Mage.Client/src/main/java/mage/client/draft/DraftPanel.java @@ -91,7 +91,7 @@ public class DraftPanel extends javax.swing.JPanel { } public void cleanUp() { - draftPicks.clear(); + draftPicks.cleanUp(); draftBooster.clear(); if (countdown != null) { 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 0766ca32b1a..9b4c8c88e73 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 @@ -34,6 +34,7 @@ import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import org.jboss.logging.Logger; public class MageActionCallback implements ActionCallback { @@ -388,17 +389,20 @@ public class MageActionCallback implements ActionCallback { final Component popupContainer = MageFrame.getUI().getComponent(MageComponents.CARD_PREVIEW_CONTAINER); Component cardPreview = MageFrame.getUI().getComponent(MageComponents.CARD_PREVIEW_PANE); - //((CardInfoPaneImplExt) cardPreview).setCard(data.card); - Point location = new Point((int) data.locationOnScreen.getX() + data.popupOffsetX - 40, (int) data.locationOnScreen.getY() + data.popupOffsetY - 40); - location = GuiDisplayUtil.keepComponentInsideParent(location, parentPoint, cardPreview, parentComponent); - location.translate(-parentPoint.x, -parentPoint.y); - popupContainer.setLocation(location); - popupContainer.setVisible(true); + if (cardPreview != null) { + Point location = new Point((int) data.locationOnScreen.getX() + data.popupOffsetX - 40, (int) data.locationOnScreen.getY() + data.popupOffsetY - 40); + location = GuiDisplayUtil.keepComponentInsideParent(location, parentPoint, cardPreview, parentComponent); + location.translate(-parentPoint.x, -parentPoint.y); + popupContainer.setLocation(location); + popupContainer.setVisible(true); - MageCard card = (MageCard) data.component; - Image image = card.getImage(); - BigCard bigCard = (BigCard)cardPreview; - displayCardInfo(card, image, bigCard); + MageCard card = (MageCard) data.component; + Image image = card.getImage(); + BigCard bigCard = (BigCard)cardPreview; + displayCardInfo(card, image, bigCard); + } else { + Logger.getLogger(MageActionCallback.class).warn("No Card preview Pane in Mage Frame defined. Card: " + card.getName()); + } } catch (Exception e) { e.printStackTrace(); diff --git a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java index 0511421614e..38f955a5f96 100644 --- a/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java +++ b/Mage.Client/src/main/java/org/mage/card/arcane/CardPanel.java @@ -267,7 +267,9 @@ public class CardPanel extends MagePermanent implements MouseListener, MouseMoti for(MouseWheelListener ml: this.getMouseWheelListeners() ){ this.removeMouseWheelListener(ml); } + // this holds reference to ActionCallback forever so set it to null to prevent this.callback = null; + this.data = null; } private void setText(CardView card) {