Почему Java изменяет размер окна до 1x1 пикселя при отключении HDMI (и не меняет размер обратно при подключении HDMI)
У меня есть Java-приложение, работающее на:
XWayland 2:1.20.11-1+deb11u6,Weston 9.0.0-1,OpenJDK 11.0.18+10-1~deb11u1,Debian 11, ядро 5.10.52
Мой JFrame (Window) установлен на:GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().setFullScreenWindow(this);
После этого я могу видеть свой интерфейс на полном экране (в моем случае это телевизор, и в ядре включен CEC). Однако после того, как я отключил HDMI и снова подключил HDMI, мой интерфейс пропал (черный экран). Остался только один маленький пиксель размером 1х1. Кажется, размер окна изменяется Java/XWayland/(Weston). Я уверен, что не меняю его - я проверяю все методы изменения размера на JFrame.
Когда я перезапускаю свое Java-приложение, оно снова возвращается - так что это не проблема непосредственно ОС (Linux), а также - скорее всего - не Weston.
У меня также нет этой проблемы с чистым приложением Wayland (например, Weston Flower). Используя только Wayland (без Java и XWayland), все работает.
Когда я ПОДКЛЮЧАЮ HDMI, НЕТ java.awt.event.ComponentEvent.
Когда я ОТКЛЮЧАЮ HDMI, я получаю следующее java.awt.event.ComponentEvent:
java.awt.event.ComponentEvent[COMPONENT_RESIZED (0,0 1x1)] on frame0
java.base/java.lang.Thread.getStackTrace(Thread.java:1602)
java.desktop/java.awt.AWTEventMulticaster.componentResized(AWTEventMulticaster.java:167)
java.desktop/java.awt.AWTEventMulticaster.componentResized(AWTEventMulticaster.java:167)
java.desktop/java.awt.Component.processComponentEvent(Component.java:6461)
java.desktop/java.awt.Component.processEvent(Component.java:6415)
java.desktop/java.awt.Container.processEvent(Container.java:2263)
java.desktop/java.awt.Window.processEvent(Window.java:2049)
java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5011)
java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2772)
java.desktop/java.awt.Component.dispatchEvent(Component.java:4843)
java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
java.base/java.security.AccessController.doPrivileged(Native Method)
java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
java.base/java.security.AccessController.doPrivileged(Native Method)
java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
К сожалению, я также не знаю, как манипулировать размером после того, как поймал это событие. Я попробовал напрямую установить размер обратно, но это не помогло. Я думаю, что это может не сработать, потому что в данный момент HDMI ОТКЛЮЧЕН.
Поскольку я не получаю никаких событий, когда HDMI снова ПОДКЛЮЧЕН, я также не знаю, когда (попытаться) вернуть размер на «нормальный».