--- old/test/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java 2015-11-19 22:26:45.455795637 +0530 +++ new/test/java/awt/TrayIcon/PopupMenuLeakTest/PopupMenuLeakTest.java 2015-11-19 22:26:45.175795637 +0530 @@ -44,6 +44,7 @@ static final AtomicReference> iconWeakReference = new AtomicReference<>(); static final AtomicReference> popupWeakReference = new AtomicReference<>(); static ExtendedRobot robot; + static Frame popupMenuParentFrame; public static void main(String[] args) throws Exception { robot = new ExtendedRobot(); @@ -72,6 +73,10 @@ 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) { @@ -82,7 +87,6 @@ bytes.add(new byte[1024]); } } catch (OutOfMemoryError err) { - bytes = new ArrayList<>(); } } if (reference.get() != null) { @@ -137,13 +141,19 @@ } 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); } -} +} \ No newline at end of file