JWindow lors d'un dispose() lève 2x l'évènement windowClosed, contrairement à Window ou à JFrame qui ne le lancent qu'une fois.
Voici le code de test, pour tester avec JFrame et Window il suffit de remplacer JWindow après le extends (et de rajouter super(null) pour Window au début du constructeur):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public class TestWindow extends JWindow {
 
	public TestWindow() {
//		super(null);
		addWindowListener(new WindowAdapter() {
			@Override public void windowClosed(WindowEvent e) {
				System.out.println("windowClosed");
			}
		});
		Timer timer = new Timer(1000, new ActionListener() {
 
			public void actionPerformed(ActionEvent e) {
				dispose();
			}
		});
		timer.setRepeats(false);
 
		setBounds(100,100,100,100);
		setVisible(true);
 
		timer.start();
	}
 
	public static void main(String... args) {
		SwingUtilities.invokeLater(new Runnable() {
 
			@Override
			public void run() {
				new TestWindow();
			}
		});
	}
}
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
windowClosed
windowClosed