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/11/11 18:12:11 UTC
svn commit: r1894954 -
/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
Author: tilman
Date: Thu Nov 11 18:12:11 2021
New Revision: 1894954
URL: http://svn.apache.org/viewvc?rev=1894954&view=rev
Log:
PDFBOX-5320: reduce HighResolutionImageIcons memory leaks
Modified:
pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
Modified: pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java?rev=1894954&r1=1894953&r2=1894954&view=diff
==============================================================================
--- pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java (original)
+++ pdfbox/branches/2.0/debugger/src/main/java/org/apache/pdfbox/debugger/PDFDebugger.java Thu Nov 11 18:12:11 2021
@@ -1050,6 +1050,33 @@ 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);
}