为什么我的JavaFx应用程序在我的RaspberryPi上运行时没有框架?

时间:2014-07-02 18:15:13

标签: javafx raspberry-pi raspbian

我在Raspberry Pi上安装了JDK 8,并尝试运行javaFx示例应用程序。我的操作系统是Raspbian。我正在使用" DigitalClock" Netbeans 8附带的示例应用程序。应用程序在Pi上启动并运行,但是当它完成时几乎全屏并且在主视图周围有这个大的黑色边框。此外,应用程序上没有框架。没有退出或最小化按钮。坦率地说,我不知道如何关闭应用程序或只是在较小的窗口中运行它。要继续使用我的Pi,我必须拔掉它并重新启动。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:7)

JavaFX开发人员Daniel Blaukopf在Raspberry Pi forum中解释了这一点:

  

Raspberry Pi上的JavaFX使用帧缓冲,而不是X11桌面。它占据了整个屏幕。请参阅a open-jfx wiki page on the Raspberry Pi

     

Raspberry Pi上具有加速图形的JavaFX仅处于全屏模式。可以在窗口中进行非加速图形,但性能会非常糟糕。 Pi上的EGL实现在X11窗口中不支持OpenGL,至少不是我检查的时间。

我还要在这里复制open-jfx wiki中的链接信息,以防wiki页面死掉:

  

Raspberry Pi上的JavaFX接管整个屏幕并捕获所有Linux输入设备。虽然这通常是您在部署的应用程序中所需的行为,但它不太便于开发,因为除非JavaFX应用程序具有侦听控件的KeyEvent处理程序,否则您无法使用control-C停止应用程序-C并拨打Platform.exit()。这没有什么不寻常之处 - 许多Linux全屏控制台应用程序具有相同的行为 - 但在开发期间快速结束应用程序而不更改应用程序代码通常很有用。

     

有两种方法可以运行能够被control-C终止的应用程序:

     
      
  1. 通过SSH连接从PC运行应用程序。这样可以最大程度地控制设备,因为一旦设置了SSH连接,您就可以将它们用于其他目的。

  2.   
  3. 或者,您可以使用内置调试功能来捕获control-C。如果在启动Java之前设置环境变量JAVAFX_DEBUG=1,那么当您按control-C时,JavaFX将退出。例如:

  4.   
JAVAFX_DEBUG=1
/opt/jdk1.8.0/bin/java -cp Stopwatch.jar stopwatch.MainScreen
  
    

JAVAFX_DEBUG环境变量仅用于开发,您不应该依赖它来部署应用程序。将来,此功能可能会以不同方式指定或删除。

  

添加个人问题的答案

  

是否有最佳实践"允许用户退出以全屏模式运行的JavaFX应用程序?我希望我的用户能够启动我的应用程序,使用它,然后关闭它。

您应该对应用程序进行编码,以包含一个相当明显的UI元素,允许用户关闭应用程序。例如,通过在主应用程序屏幕上放置关闭按钮或提供关闭菜单选项:

Button close = new Button("Close");
close.setOnAction(
    new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            primaryStage.close();
            // or Platform.exit();
        }
    }
);

如果您还希望应用程序响应并退出组合键,例如 Ctrl + C ,那么您还可以包含一个组合键加速器:

primaryStage.getScene().getAccelerators().put(
    KeyCombination.keyCombination("CTRL+C"),
    new Runnable() {
        @Override
        public void run() {
            Platform.exit();
        }
    }
);