ADDITIONAL SYSTEM INFORMATION :
Ubuntu 22.04
JDK https://download.java.net/openjdk/jdk17/ri/openjdk-17+35_linux-x64_bin.tar.gz
A DESCRIPTION OF THE PROBLEM :
Many java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0 when the monitor is disconnected and reconnected.
Similar to JDK-8229821, which refers to JDK-8211992.
This is happening on a Ubuntu 22.04 install with a single monitor (displayport) that is being disconnected / reconnected. The example I provided used jshell to execute JOptionPane.showInputDialog. If showMessageDialog() is used instead the problem doesn't seem to happen, probably because of the lack of events because there is no input field.
I am unable to reproduce this on a second Ubuntu install on a laptop that has a built-in display in addition to the external display that is being disconnected.
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Have a swing GUI component displaying on screen
Disconnect monitor from computer.
(May need to cause some events, ie. type something on keyboard or move mouse)
Reconnect monitor.
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
No exceptions
ACTUAL -
Spammed with IllegalArgumentExceptions:
Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Width (0) and height (0) cannot be <= 0
at java.desktop/sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:75)
at java.desktop/sun.awt.image.SunVolatileImage.<init>(SunVolatileImage.java:122)
at java.desktop/java.awt.GraphicsConfiguration.createCompatibleVolatileImage(GraphicsConfiguration.java:305)
at java.desktop/java.awt.GraphicsConfiguration.createCompatibleVolatileImage(GraphicsConfiguration.java:239)
at java.desktop/javax.swing.RepaintManager.getVolatileOffscreenBuffer(RepaintManager.java:1112)
at java.desktop/javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1557)
at java.desktop/javax.swing.RepaintManager.paint(RepaintManager.java:1337)
at java.desktop/javax.swing.JComponent._paintImmediately(JComponent.java:5259)
at java.desktop/javax.swing.JComponent.paintImmediately(JComponent.java:5069)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:879)
at java.desktop/javax.swing.RepaintManager$4.run(RepaintManager.java:862)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:862)
at java.desktop/javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:835)
at java.desktop/javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:784)
at java.desktop/javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1898)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:117)
at java.desktop/java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:191)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:318)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:771)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:741)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
---------- BEGIN SOURCE ----------
using jshell:
import javax.swing.*;
JOptionPane.showInputDialog("Input text");
---------- END SOURCE ----------
FREQUENCY : always