Usei o seguinte código:
package br.com.codesoftwares.test.bd;
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDesktopPane;
import javax.swing.JFrame;
import javax.swing.JInternalFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
public class JInternalFrameTest {
static int count = 0;
public static void main(String[] args) throws Exception {
JFrame frame = new JFrame();
frame.setBounds(0, 0, 500, 500);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
final JDesktopPane desktopPane = new JDesktopPane();
frame.add(desktopPane);
JButton open = new JButton("OPEN FRAME");
JButton close = new JButton("CLOSE FRAME");
JButton gc = new JButton("GC FRAME");
JPanel buttonPanel = new JPanel(new GridLayout(1, 4));
buttonPanel.add(open);
buttonPanel.add(close);
buttonPanel.add(gc);
frame.add(buttonPanel, BorderLayout.SOUTH);
open.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JInternalFrame frameCollect = new JInternalFrame("Teste " + count, true, true, true, true){
@Override
protected void finalize() throws Throwable {
System.err.println("Object - " + getTitle() + " sendo finalizado!");
super.finalize();
}
};
frameCollect.setBounds(30, 30, 300, 300);
frameCollect.setLayout(new FlowLayout());
JComboBox comboBox = new JComboBox();
JScrollPane panel = new JScrollPane(comboBox);
frameCollect.add(panel);
frameCollect.setVisible(true);
desktopPane.add(frameCollect);
}
});
close.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
JInternalFrame frameCollect = (JInternalFrame) desktopPane.getComponent(0);
frameCollect.doDefaultCloseAction();
}
});
gc.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.gc();
}
});
frame.setVisible(true);
}
}
Ao abrir a JInternalFrame e fechar, e passar o GC ela coleta normalmente.
Agora se abrir a JInternalFrame e clicar no combobox para exibir o popup e fechar, ela não coleta.
Alguma idéai.
Há isto foi no Java 6U3, e no Java 5 funciona.