JAL-2608 tidy up OverviewPanel when closed
authorgmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 4 Jul 2017 08:35:01 +0000 (09:35 +0100)
committergmungoc <g.m.carstairs@dundee.ac.uk>
Tue, 4 Jul 2017 08:35:01 +0000 (09:35 +0100)
src/jalview/appletgui/AlignFrame.java
src/jalview/appletgui/OverviewPanel.java
src/jalview/gui/AlignFrame.java
src/jalview/gui/OverviewPanel.java

index 4ffdfc1..65d652d 100644 (file)
@@ -2617,7 +2617,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
     }
 
     Frame frame = new Frame();
-    OverviewPanel overview = new OverviewPanel(alignPanel);
+    final OverviewPanel overview = new OverviewPanel(alignPanel);
     frame.add(overview);
     // +50 must allow for applet frame window
     jalview.bin.JalviewLite.addFrame(frame, MessageManager.formatMessage(
@@ -2632,6 +2632,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener,
       @Override
       public void windowClosing(WindowEvent e)
       {
+        overview.dispose();
         if (ap != null)
         {
           ap.setOverviewPanel(null);
index b3c4a37..ccdfee1 100755 (executable)
@@ -160,6 +160,14 @@ public class OverviewPanel extends Panel implements Runnable,
    */
   public void updateOverviewImage()
   {
+    if (oviewCanvas == null)
+    {
+      /*
+       * panel has been disposed
+       */
+      return;
+    }
+
     if ((getSize().width > 0) && (getSize().height > 0))
     {
       od.setWidth(getSize().width);
@@ -257,4 +265,21 @@ public class OverviewPanel extends Panel implements Runnable,
     oviewCanvas.resetOviewDims(od);
     updateOverviewImage();
   }
+
+  /**
+   * Removes this object as a property change listener, and nulls references
+   */
+  protected void dispose()
+  {
+    try
+    {
+      av.getRanges().removePropertyChangeListener(this);
+    } finally
+    {
+      av = null;
+      oviewCanvas = null;
+      ap = null;
+      od = null;
+    }
+  }
 }
index 1a58e21..6b6ff9a 100644 (file)
@@ -3259,7 +3259,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
     }
 
     JInternalFrame frame = new JInternalFrame();
-    OverviewPanel overview = new OverviewPanel(alignPanel);
+    final OverviewPanel overview = new OverviewPanel(alignPanel);
     frame.setContentPane(overview);
     Desktop.addInternalFrame(frame, MessageManager.formatMessage(
             "label.overview_params", new Object[] { this.getTitle() }),
@@ -3272,6 +3272,7 @@ public class AlignFrame extends GAlignFrame implements DropTargetListener,
       public void internalFrameClosed(
               javax.swing.event.InternalFrameEvent evt)
       {
+        overview.dispose();
         alignPanel.setOverviewPanel(null);
       };
     });
index 62e7a68..7a4456e 100755 (executable)
@@ -147,7 +147,6 @@ public class OverviewPanel extends JPanel implements Runnable,
       }
     });
 
-
     updateOverviewImage();
   }
 
@@ -205,6 +204,14 @@ public class OverviewPanel extends JPanel implements Runnable,
    */
   public void updateOverviewImage()
   {
+    if (oviewCanvas == null)
+    {
+      /*
+       * panel has been disposed
+       */
+      return;
+    }
+
     if ((getWidth() > 0) && (getHeight() > 0))
     {
       od.setWidth(getWidth());
@@ -221,7 +228,6 @@ public class OverviewPanel extends JPanel implements Runnable,
     Thread thread = new Thread(this);
     thread.start();
     repaint();
-
   }
 
   @Override
@@ -251,4 +257,21 @@ public class OverviewPanel extends JPanel implements Runnable,
   {
     setBoxPosition();
   }
+
+  /**
+   * Removes this object as a property change listener, and nulls references
+   */
+  protected void dispose()
+  {
+    try
+    {
+      av.getRanges().removePropertyChangeListener(this);
+    } finally
+    {
+      av = null;
+      oviewCanvas = null;
+      ap = null;
+      od = null;
+    }
+  }
 }