From 4ab572bd0eb305d24760087ae42bd61f8a930c76 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Thu, 30 Jan 2014 03:05:49 +0100 Subject: [PATCH] * MageDialog - Removed some memory leaks for client dialogs (more to come soon). --- .../src/main/java/mage/client/MageFrame.java | 4 +++ .../main/java/mage/client/chat/ChatPanel.java | 1 + .../java/mage/client/components/MageUI.java | 13 +++++--- .../java/mage/client/dialog/AboutDialog.form | 4 +-- .../java/mage/client/dialog/AboutDialog.java | 17 +++++++---- .../java/mage/client/dialog/MageDialog.java | 30 ++++++++++--------- .../client/dialog/TableWaitingDialog.form | 4 +-- .../client/dialog/TableWaitingDialog.java | 15 ++++++---- .../main/java/mage/server/ChatManager.java | 5 +++- 9 files changed, 59 insertions(+), 34 deletions(-) diff --git a/Mage.Client/src/main/java/mage/client/MageFrame.java b/Mage.Client/src/main/java/mage/client/MageFrame.java index adcfa29483e..95fa08395a3 100644 --- a/Mage.Client/src/main/java/mage/client/MageFrame.java +++ b/Mage.Client/src/main/java/mage/client/MageFrame.java @@ -1122,6 +1122,10 @@ public class MageFrame extends javax.swing.JFrame implements MageClient { chats.put(chatId, chatPanel); } + public static void removeChat(UUID chatId) { + chats.remove(chatId); + } + public static GamePanel getGame(UUID gameId) { return games.get(gameId); } diff --git a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java index 4c67a3a1915..997ad8d2596 100644 --- a/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java +++ b/Mage.Client/src/main/java/mage/client/chat/ChatPanel.java @@ -191,6 +191,7 @@ public class ChatPanel extends javax.swing.JPanel { public void disconnect() { if (session != null) { session.leaveChat(chatId); + MageFrame.removeChat(chatId); } } diff --git a/Mage.Client/src/main/java/mage/client/components/MageUI.java b/Mage.Client/src/main/java/mage/client/components/MageUI.java index 282e3a93e7b..d1e683e8717 100644 --- a/Mage.Client/src/main/java/mage/client/components/MageUI.java +++ b/Mage.Client/src/main/java/mage/client/components/MageUI.java @@ -1,15 +1,14 @@ package mage.client.components; import java.awt.Component; -import java.util.HashMap; +import java.util.EnumMap; import java.util.Map; - import javax.swing.JButton; public class MageUI { - private Map ui = new HashMap(); - private Map sync = new HashMap(); + private final Map ui = new EnumMap(MageComponents.class); + private final Map sync = new EnumMap(MageComponents.class); public JButton getButton(MageComponents name) throws InterruptedException { //System.out.println("request for " + name); @@ -70,6 +69,12 @@ public class MageUI { } } + public void removeButton(MageComponents name) { + synchronized (ui) { + ui.remove(name); + } + } + public void addComponent(MageComponents name, Component component) { synchronized (ui) { ui.put(name, component); diff --git a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form index 5f45fa6c21b..33bf1cd4405 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.form @@ -53,7 +53,7 @@ - + @@ -91,7 +91,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java index adfe70373fc..84a0869526e 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/AboutDialog.java @@ -26,15 +26,17 @@ * or implied, of BetaSteward_at_googlemail.com. */ +package mage.client.dialog; + +import mage.utils.MageVersion; + /* * AboutDialog.java * * Created on Mar 10, 2010, 8:19:41 AM */ -package mage.client.dialog; -import mage.utils.MageVersion; /** * @@ -44,8 +46,9 @@ public class AboutDialog extends MageDialog { /** Creates new form AboutDialog */ public AboutDialog() { + this.setDefaultCloseOperation(DISPOSE_ON_CLOSE); initComponents(); - this.modal = false; + // this.modal = false; } public void showDialog(MageVersion version) { @@ -87,7 +90,7 @@ public class AboutDialog extends MageDialog { jLabel3.setText("Devs: BetaSteward, Noxx, Eugen.Rivniy, North, LevelX2, Jeff, Plopman. "); - jLabel4.setText("Thanks: maurer.it, Rafbill, Alvin, cbt33."); + jLabel4.setText("Thanks: maurer.it, Rafbill, Alvin, cbt33, Quercitron."); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); @@ -119,7 +122,7 @@ public class AboutDialog extends MageDialog { .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel4) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE) .addComponent(btnOk) .addContainerGap()) ); @@ -128,7 +131,9 @@ public class AboutDialog extends MageDialog { }// //GEN-END:initComponents private void btnOkActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnOkActionPerformed - this.hideDialog(); + + + this.removeDialog(); }//GEN-LAST:event_btnOkActionPerformed // Variables declaration - do not modify//GEN-BEGIN:variables diff --git a/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java b/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java index 21694f92aa5..968e9a70c35 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/MageDialog.java @@ -39,14 +39,16 @@ import org.apache.log4j.Logger; import javax.swing.*; import java.awt.*; import java.awt.event.MouseEvent; +import java.beans.PropertyVetoException; import java.lang.reflect.InvocationTargetException; +import java.util.logging.Level; import mage.client.MageFrame; /** * * @author BetaSteward_at_googlemail.com */ -public class MageDialog extends javax.swing.JInternalFrame { + public class MageDialog extends javax.swing.JInternalFrame { private static final Logger logger = Logger.getLogger(MageDialog.class); @@ -61,8 +63,9 @@ public class MageDialog extends javax.swing.JInternalFrame { public void show() { super.show(); this.toFront(); - if (modal) + if (modal) { this.setClosable(false); + } if (this.modal) { startModal(); } @@ -71,8 +74,9 @@ public class MageDialog extends javax.swing.JInternalFrame { @Override public void setVisible(boolean value) { super.setVisible(value); - if (value) + if (value) { this.toFront(); + } if (modal) { this.setClosable(false); if (value) { @@ -159,22 +163,20 @@ public class MageDialog extends javax.swing.JInternalFrame { } public void removeDialog() { - this.setVisible(false); + setVisible(false); MageFrame.getDesktop().remove(this); + this.ui.uninstallUI(this); + this.dispose(); + try { + this.setSelected(false); + } catch (PropertyVetoException ex) { + java.util.logging.Logger.getLogger(MageDialog.class.getName()).log(Level.SEVERE, null, ex); + } } public void setTitelBarToolTip(final String text) { desktopIcon.setToolTipText(text); //tooltip on icon - Component[] children = desktopIcon.getComponents(); -// if (children != null) { -// for(int i = 0; i < children.length; i++) { -// if (children[i] instanceof JButton){ -// ((JButton)children[i]).setToolTipText(text);//tooltip on icon button -// break; -// } -// } -// } - children = getComponents(); + Component[] children = getComponents(); if (children != null) { for(int i = 0; i < children.length; i++) { if (children[i].getClass().getName().equalsIgnoreCase( diff --git a/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.form b/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.form index 6c0783f2204..c50d5140892 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.form +++ b/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.form @@ -1,4 +1,4 @@ - +
@@ -40,7 +40,7 @@ - + diff --git a/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.java b/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.java index 6d1a0666b1c..7aa4f7003e5 100644 --- a/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.java +++ b/Mage.Client/src/main/java/mage/client/dialog/TableWaitingDialog.java @@ -139,9 +139,12 @@ public class TableWaitingDialog extends MageDialog { } public void closeDialog() { - if (updateTask != null) updateTask.cancel(true); + if (updateTask != null) { + updateTask.cancel(true); + } this.chatPanel.disconnect(); - this.hideDialog(); + MageFrame.getUI().removeButton(MageComponents.TABLE_WAITING_START_BUTTON); + this.removeDialog(); } @@ -243,11 +246,13 @@ public class TableWaitingDialog extends MageDialog { }// //GEN-END:initComponents private void btnStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnStartActionPerformed - closeDialog(); - if (!isTournament) + if (!isTournament) { session.startGame(roomId, tableId); - else + } + else { session.startTournament(roomId, tableId); + } + closeDialog(); }//GEN-LAST:event_btnStartActionPerformed private void btnCancelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCancelActionPerformed diff --git a/Mage.Server/src/main/java/mage/server/ChatManager.java b/Mage.Server/src/main/java/mage/server/ChatManager.java index 2f10f0a626f..a995bac3597 100644 --- a/Mage.Server/src/main/java/mage/server/ChatManager.java +++ b/Mage.Server/src/main/java/mage/server/ChatManager.java @@ -112,7 +112,10 @@ public class ChatManager { rest = rest.substring(first + 1).trim(); User userTo = UserManager.getInstance().findUser(userToName); if (userTo != null) { - chatSessions.get(chatId).broadcastWhisperToUser(user, userTo, rest); + if (!chatSessions.get(chatId).broadcastWhisperToUser(user, userTo, rest)) { + message += new StringBuilder("\nUser ").append(userToName).append(" not found").toString(); + chatSessions.get(chatId).broadcastInfoToUser(user,message); + } } else { message += new StringBuilder("\nUser ").append(userToName).append(" not found").toString(); chatSessions.get(chatId).broadcastInfoToUser(user,message);