java swing javafx nullpointerexception cursor

java - Una excepción en MouseInfo.getPointerInfo(). GetLocation()



swing javafx (0)

Uso JavaFX y Swing en mi aplicación GUI. Más detalladamente, utilizo SwingNode encima de AnchorPane para agregar un JPanel y un mapa sobre él (ARCGIS JMap, que se ejecuta solo en swing), que se actualiza todo el tiempo.

Cuando arrastro mi aplicación entre dos pantallas, a veces tengo una NullPointerException .

Este es el código de Java donde sucede:

MouseInfo.getPointerInfo().getLocation()

El arrastre se realiza en el elemento JavaFX (el evento es un evento JavaFX):

private void setDraggable(Parent root) { if (root != null) { root.setOnMousePressed((event) -> { xOffset = mainStage.getX() - event.getScreenX(); yOffset = mainStage.getY() - event.getScreenY(); }); root.setOnMouseDragged((event) -> { mainStage.setX(event.getScreenX() + xOffset); mainStage.setY(event.getScreenY() + yOffset); }); }

Pero la excepción ocurre en el hilo AWT.
Como dije, el código donde cae es (tenga en cuenta que este es el código interno de Java, no el mío):

MouseInfo.getPointerInfo().getLocation()

¿Qué puedo hacer para prevenir esto?

Y otra pregunta, que tal vez dará una pista, lo verifiqué, y mis dos únicos componentes de Swing (JPanel y JMap) son hijos de JComponent. Pero la excepción ocurre en JLightweightFrame. Entonces, ¿cómo puede ser posible?

Aquí está el rastro completo de la excepción:

Message = Thread AWT-EventQueue-0 (Id = 45) throw exception: null Stack-Trace = java.lang.NullPointerException at sun.swing.JLightweightFrame.updateClientCursor(JLightweightFrame.java:473) at sun.swing.JLightweightFrame.access$000(JLightweightFrame.java:79) at sun.swing.JLightweightFrame$1.updateCursor(JLightweightFrame.java:112) at sun.awt.windows.WLightweightFramePeer.updateCursorImmediately(WLightweightFramePeer.java:92) at java.awt.Component.updateCursorImmediately(Component.java:3150) at java.awt.Container.validate(Container.java:1642) at java.awt.Window.dispatchEventImpl(Window.java:2748) at java.awt.Component.dispatchEvent(Component.java:4713) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.awt.EventQueue$4.run(EventQueue.java:729) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:728) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)