Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8287403

IllegalArgumentException: Width, height cannot be <= 0 when monitor disconnect

    XMLWordPrintable

Details

    • x86_64
    • linux

    Description

      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


      Attachments

        Issue Links

          Activity

            People

              azvegint Alexander Zvegintsev
              webbuggrp Webbug Group
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: