java linux javafx raspberry-pi raspbian

Raspberry Pi no puede ocultar el cursor del mouse en la aplicación JavaFX



linux raspberry-pi (1)

Actualmente desarrollo una aplicación JavaFX para Raspberry Pi 3. Para el desarrollo en mi PC utilizo Ubuntu 16.04.1, OpenJDK 1.8.0_111 y OpenJFX 8.0.60. Para el funcionamiento en el Raspberri Pi utilizo Raspbian Jessie con PIXEL (arranque en modo consola), OpenJDK 1.8.0_40 y OpenJFX 8.0.60.

No es necesario un cursor gráfico del mouse, ya que el usuario solo debe interactuar con la aplicación mediante una pantalla táctil. Además, el cursor del mouse es molesto porque cubre ligeramente el contenido de la pantalla. Además, irrita al usuario al cambiar su posición cada vez que se toca la pantalla. Por lo tanto, quiero ocultar el cursor del mouse en la pantalla.

En mi PC, puedo ocultar el cursor del mouse usando el siguiente código:

scene.setCursor(Cursor.NONE);

Comienzo la aplicación en Raspberry Pi desde bash shell usando

java -jar MyApp.jar

Después de hacerlo, la propiedad setCurser funciona inicialmente. Pero después de tocar la pantalla o mover el mouse, aparece el cursor del mouse predeterminado en la pantalla. Esto parece ser un problema no resuelto: Publicar en el foro raspberrypi.org

El OpenJFX Wiki dice:

Tenga en cuenta que la configuración predeterminada de JavaFX en la Raspberry Pi no utiliza X11. En cambio, JavaFX funciona directamente con el framebuffer de la pantalla y los dispositivos de entrada. Por lo tanto, no debe ejecutar el escritorio X11 cuando inicie JavaFX.

Como solución, ¿cómo puedo ocultar el cursor gráfico del mouse en el framebuffer en Raspbian Jessie?


He encontrado una solución para este error. Aunque crea cierto parpadeo al inicio de mi aplicación, es aceptable en mi caso. (También podría intentar apagar la luz de fondo durante el inicio del programa) Aquí está el código mágico (el efecto de curado se descubrió accidentalmente trabajando con varias ventanas de pantalla completa)

private void fixMouse(Stage primaryStage) { Platform.runLater(()->{ //Show mouse cursor Robot robot = com.sun.glass.ui.Application.GetApplication().createRobot(); robot.mouseMove(790,470); robot.destroy(); //Show fullscreen dialog final Stage dialog = new Stage(); dialog.initModality(Modality.APPLICATION_MODAL); dialog.initOwner(primaryStage); StackPane dialogLayout = new StackPane(); dialog.setFullScreen(true); dialog.setResizable(false); dialog.setFullScreenExitKeyCombination(KeyCombination.NO_MATCH); Scene dialogScene = new Scene(dialogLayout, 0, 0); dialogScene.setCursor(Cursor.NONE); dialogScene.setFill(Color.BLACK); dialogLayout.setBackground(Background.EMPTY); dialog.setScene(dialogScene); dialog.show(); // Auto close the dialog Platform.runLater(()->{ dialog.close(); primaryStage.setFullScreen(true); }); }); }