You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2021/12/02 15:36:29 UTC

svn commit: r1895490 - in /pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger: PDFDebugger.java pagepane/PagePane.java

Author: tilman
Date: Thu Dec  2 15:36:29 2021
New Revision: 1895490

URL: http://svn.apache.org/viewvc?rev=1895490&view=rev
Log:
PDFBOX-5320: use simpler way to avoid memory leaks

Modified:
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
    pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1895490&r1=1895489&r2=1895490&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java Thu Dec  2 15:36:29 2021
@@ -71,6 +71,7 @@ import javax.swing.border.BevelBorder;
 import javax.swing.event.TreeSelectionEvent;
 import javax.swing.filechooser.FileFilter;
 import javax.swing.tree.TreePath;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -1053,33 +1054,6 @@ public class PDFDebugger extends JFrame
     private void replaceRightComponent(Component pane)
     {
         int div = jSplitPane.getDividerLocation();
-        
-        // Avoid memory leak with the display image
-        // if anyone knows a better way to do this, please tell
-        Component rightComponent = jSplitPane.getRightComponent();
-        if (rightComponent instanceof JScrollPane)
-        {
-            JScrollPane scrollPane = (JScrollPane) rightComponent;
-            Component view = scrollPane.getViewport().getView();
-            if (view instanceof JPanel)
-            {
-                JPanel panel = (JPanel) view;
-                for (Component component : panel.getComponents())
-                {
-                    if (component instanceof JLabel)
-                    {
-                        ((JLabel) component).setIcon(null);
-                    }
-                }
-                panel.removeAll();
-                scrollPane.getViewport().setView(null);
-                scrollPane.getViewport().removeAll();
-                scrollPane.setViewport(null);
-                scrollPane.removeAll();
-                // still leaks but it's really the image that bothers; listeners still active
-            }
-        }
-
         jSplitPane.setRightComponent(pane);
         jSplitPane.setDividerLocation(div);
     }

Modified: pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java
URL: http://svn.apache.org/viewvc/pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java?rev=1895490&r1=1895489&r2=1895490&view=diff
==============================================================================
--- pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java (original)
+++ pdfbox/trunk/debugger/src/main/java/org/apache/pdfbox/debugger/pagepane/PagePane.java Thu Dec  2 15:36:29 2021
@@ -376,6 +376,13 @@ public class PagePane implements ActionL
                 }
             }
         }
+
+        // this avoids memory leaks with the display image; other memory leaks may still exist
+        label.removeMouseMotionListener(this);
+        label.removeMouseListener(this);
+        label.setIcon(null);
+        panel.removeAncestorListener(this);
+        panel.removeAll();
     }
 
     @Override