为什么JavaFx应用程序在RaspberryPi上运行时没有框架?
我在Raspberry Pi上安装了JDK 8,并尝试运行javaFx示例应用程序。我的操作系统是Raspbian。我正在使用Netbeans 8附带的“DigitalClock”示例应用程序。应用程序在Pi上启动和运行,但当它启动时,它几乎是全屏的,并且在主视图周围有一个大的黑色边框。此外,应用程序上没有框架。没有退出或最小化按钮。坦白地说,我不知道如何关闭应用程序或只是在较小的窗口中运行它。要继续使用我的Pi,我必须拔掉它并重新启动为什么JavaFx应用程序在RaspberryPi上运行时没有框架?,javafx,raspberry-pi,raspbian,Javafx,Raspberry Pi,Raspbian,我在Raspberry Pi上安装了JDK 8,并尝试运行javaFx示例应用程序。我的操作系统是Raspbian。我正在使用Netbeans 8附带的“DigitalClock”示例应用程序。应用程序在Pi上启动和运行,但当它启动时,它几乎是全屏的,并且在主视图周围有一个大的黑色边框。此外,应用程序上没有框架。没有退出或最小化按钮。坦白地说,我不知道如何关闭应用程序或只是在较小的窗口中运行它。要继续使用我的Pi,我必须拔掉它并重新启动 我做错了什么?JavaFX开发人员Daniel Blauk
我做错了什么?JavaFX开发人员Daniel Blaukopf在一篇文章中解释了这一点: Raspberry Pi上的JavaFX使用帧缓冲区,而不是X11桌面。它占据了整个屏幕。看 Raspberry Pi上带有加速图形的JavaFX仅处于全屏模式。在窗口中进行非加速图形是可能的,但其性能相当差。Pi上的EGL实现不支持X11窗口中的OpenGL,至少在我检查的时候是这样 我还将从打开的jfx wiki复制链接信息,以防wiki页面死掉: Raspberry Pi上的JavaFX接管整个屏幕并捕获所有Linux输入设备。虽然这通常是您希望在已部署应用程序中实现的行为,但开发起来不太方便,因为您无法停止使用control-C的应用程序,除非JavaFX应用程序具有侦听control-C并调用
Platform.exit()
的KeyEvent
处理程序。这并没有什么不寻常的地方——许多Linux全屏控制台应用程序都有相同的行为——但在开发过程中,在不更改应用程序代码的情况下,有一种快速结束应用程序的方法通常很有用
有两种方法可以运行能够被control-C终止的应用程序:
JAVAFX_DEBUG=1
,则按下control-C时,JAVAFX将退出。例如:
Button close = new Button("Close");
close.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.close();
// or Platform.exit();
}
}
);
谢谢是否有允许用户退出全屏运行的JavaFx应用程序的“最佳实践”?我希望我的用户能够启动我的应用程序,使用它,然后关闭它。@贾斯汀威斯曼:或者,考虑<代码>快捷方式+C“<代码> >,在另一个平台上建议和说明。请注意,MacOS会自动处理
“快捷方式+Q”
;您的平台可能会有所不同。
Button close = new Button("Close");
close.setOnAction(
new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
primaryStage.close();
// or Platform.exit();
}
}
);
primaryStage.getScene().getAccelerators().put(
KeyCombination.keyCombination("CTRL+C"),
new Runnable() {
@Override
public void run() {
Platform.exit();
}
}
);