目前我为Raspberry Pi 3开发了一个JavaFX应用程序。为了在我的PC上进行开发,我使用的是Ubuntu 16.04.1,OpenJDK 1.8.0_111和OpenJFX 8.0.60。对于Raspberri Pi上的操作,我使用Raspbian Jessie和PIXEL(在控制台模式下启动),OpenJDK 1.8.0_40和OpenJFX 8.0.60。
不需要图形鼠标光标,因为用户只应使用触摸屏与应用程序进行交互。此外,鼠标光标很烦人,因为它略微覆盖了屏幕的内容。此外,每当触摸屏幕时,它通过改变其位置来刺激用户。因此,我想将鼠标光标隐藏在屏幕上。
在我的电脑上,我可以使用以下代码隐藏鼠标光标:
scene.setCursor(Cursor.NONE);
我使用
从bash shell启动Raspberry Pi上的应用程序java -jar MyApp.jar
这样做之后,setCurser属性最初起作用。但是在触摸屏幕或移动鼠标后,屏幕上会出现默认的鼠标光标。这似乎是一个尚未解决的问题:Post on raspberrypi.org forum
请注意,Raspberry Pi上的JavaFX的默认配置可以 不要使用X11。相反,JavaFX直接与显示器配合使用 帧缓冲和输入设备。所以你不应该有X11桌面 在启动JavaFX时运行。
作为一种解决方法,如何在Raspbian Jessie的framebuffer中隐藏图形鼠标光标?
答案 0 :(得分:1)
我找到了这个bug的解决方法。虽然它在我的应用程序开始时会产生一些闪烁,但在我的情况下是可以接受的。 (也可以尝试在程序启动时关闭背光) 这是魔法代码(治疗效果是在几个全屏窗口中偶然发现的)
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);
});
});
}
答案 1 :(得分:0)
对于那些在搜索时偶然发现此问题的人:
我能够通过反编译jfxrt.jar并更改com.sun.glass.ui.monocle.DispmanCursor类中的一行来解决此问题。我用BytecodeViewer进行了反编译,更改了setVisibility
方法以始终设置false
的值并保存为jar。 (是的,更合适的方法是从源代码构建openjfx,但是对于这么小的更改,这种方法会更快)
如果有人知道一种从代码中获取DispmanCursor实例以使用该方法的方法(尽管它是本地程序包,所以我怀疑有办法)-让我知道。
我添加的另一个修复程序是更改com.sun.glass.ui.monocle.AcceleratedScreen-自此以来,它已更改了硬编码的库名:libGLESv2.so和libEGL.so现在分别称为libbrcmGLESv2.so和libbrcmEGL.so (有关更多信息,请参见this线程)。
这是最后的fixed jfxrt.jar。