Have you used a memory profiling tool like OptimizeIt or JProbe? We've found
that there is usually a workaround to a memory leak, even if the leak is in
Swing code rather than our own code. If you can figure out what is holding
and collecting the stale references, you can force Swing to release them.
Sometimes it is simply a matter of unregistering a listener internal to a
Swing component.

What does Sun's BugParade say is the cause of the memory leak? What
Swing/AWT objects are leaking?

-----Original Message-----
From: Mike Welz [mailto:[EMAIL PROTECTED]]
Sent: Friday, March 01, 2002 11:02 AM
To: '[EMAIL PROTECTED]'
Subject: Memory leak in JEditorPane setText()



I've got a kiosk-type program that displays small(<1K) HTML pages repeatedly
using the JEditorPane setText() method.  The problem I have is that HTML
pages that contain 'TABLE' tags with a 'width' attribute seem to cause a
memory leak that leads to the JVM running out of memory eventually.

This happens on WinNT and Win95 using either JDK 1.2.2 or 1.3_02.

I've attached a small program that demonstrates this problem. Displaying the
TABLE without the width attribute will work indefinitely.  Using the width
attribute, memory usage goes up and up.  

Does anyone have any ideas how to get around this or alternatives to the
JEditorPane for displaying HTML?

TIA,

Mike




File:  EPTest.java


import java.lang.*;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class EPTest extends JFrame
        {
        public JEditorPane              html_pane;

        public EPTest() {
                html_pane = new JEditorPane();
                html_pane.setContentType("text/html");
                html_pane.setEditable(false);
                getContentPane().add(html_pane, BorderLayout.CENTER);
                setSize(400,400);
        }

        private static void gc() {
                try {
                        System.gc();
                        Thread.currentThread().sleep(100);
                        System.runFinalization();
                        Thread.currentThread().sleep(100);
                        System.gc();
                        Thread.currentThread().sleep(100);
                        System.runFinalization();
                        Thread.currentThread().sleep(100);
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }

        public static void main(String [] args) {
                String str1 = new String("<HTML>" +
                                                "<BODY><TABLE width='100%'>"
+               // causes leak
                                //              "<BODY><TABLE>" +
// works fine
                                                "<TR><TD colspan='2'>ONE
HEADER</TD></TR>" +
        
"<TR><TD>1</TD><TD>Apple</TD></TR>" +
        
"<TR><TD>2</TD><TD>Orange</TD></TR>" +
        
"<TR><TD>3</TD><TD>Pear</TD></TR>" +
                                                "</TABLE></BODY>" +
                                                "</HTML>");
                EPTest eptest = new EPTest();
                eptest.setVisible(true);
                int loop = 0;
                while (true) {
                        loop++;
                        eptest.html_pane.setText(str1);
                        try {
                                Thread.sleep(1000);
                        }
                        catch (Exception e) {
                                e.printStackTrace();
                        }
                        if (loop % 10 == 0) {
                                System.out.println("Loop: " + loop);
                                gc();
                                Runtime rt = Runtime.getRuntime();
                                int used = (int)(rt.totalMemory() -
rt.freeMemory());
                                System.out.println("Memory: " + (used /
1000) + "/" + 
        
(rt.totalMemory() / 1000) + "K");
                        }
                }
        }
}
_______________________________________________
Advanced-swing mailing list
[EMAIL PROTECTED]
http://eos.dk/mailman/listinfo/advanced-swing
_______________________________________________
Advanced-swing mailing list
[EMAIL PROTECTED]
http://eos.dk/mailman/listinfo/advanced-swing

Reply via email to