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)