< prev index next >

test/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java

Print this page

        

@@ -42,10 +42,11 @@
 public class PopupMenuLeakTest {
 
     static final AtomicReference<WeakReference<TrayIcon>> iconWeakReference = new AtomicReference<>();
     static final AtomicReference<WeakReference<PopupMenu>> popupWeakReference = new AtomicReference<>();
     static ExtendedRobot robot;
+    static Frame popupMenuParentFrame;
 
     public static void main(String[] args) throws Exception {
         robot = new ExtendedRobot();
         SwingUtilities.invokeAndWait(PopupMenuLeakTest::createSystemTrayIcon);
         sleep();

@@ -70,21 +71,24 @@
         TrayIcon icon = iconWeakReference.get().get();
         if (icon == null) {
             throw new RuntimeException("Failed: TrayIcon collected too early");
         }
         SystemTray.getSystemTray().remove(icon);
+
+        PopupMenu menu = popupWeakReference.get().get();
+        popupMenuParentFrame.remove(menu);
+        popupMenuParentFrame.dispose();
     }
 
     private static void assertCollected(WeakReference<?> reference, String message) {
         java.util.List<byte[]> bytes = new ArrayList<>();
         for (int i = 0; i < 5; i ++) {
             try {
                 while (true) {
                     bytes.add(new byte[1024]);
                 }
             } catch (OutOfMemoryError err) {
-                bytes = new ArrayList<>();
             }
         }
         if (reference.get() != null) {
             throw new RuntimeException(message);
         }

@@ -135,13 +139,19 @@
 
         return trayImage;
     }
 
     private static PopupMenu createTrayIconPopupMenu() {
+        popupMenuParentFrame = new Frame();
+        popupMenuParentFrame.setSize(200, 200);
+        popupMenuParentFrame.setVisible(true);
+
         final PopupMenu trayIconPopupMenu = new PopupMenu();
         final MenuItem popupMenuItem = new MenuItem("TEST!");
         trayIconPopupMenu.add(popupMenuItem);
+
+        popupMenuParentFrame.add(trayIconPopupMenu);
         return trayIconPopupMenu;
     }
 
     private static void sleep() {
         robot.waitForIdle(100);
< prev index next >