首页 > 解决方案 > JavaFX 不显示 JPG 文件

问题描述

出于某种原因,我的应用程序没有在 JavaFX 窗口中显示 JPG 文件。无论我是尝试在 ImageViewer 节点内显示图像还是使用 CSS-fx-background-image: url(...);属性将其设置为背景,都没有关系。

我正在使用 OpenJDK 16+36(我使用 Hotspot 和 OpenJ9 JVM 进行了测试)、JavaFX 16,我的操作系统是 Linux 5.11.16,我的窗口管理器是 GNOME Shell 3.38.4。

PS:不用说,操作系统处理JPG图像没有任何问题。

什么可能导致这种行为?

编辑1:

对我来说,JavaFX 上没有任何涉及 jpeg 的东西。无论我尝试使用 jpeg 作为背景图像,就像Oracle 的示例,还是在 ImageViewer 中,结果都是一样的(窗口正常打开,就好像我没有放任何图像一样)。如果我用不同的扩展名替换文件,它会完美运行。有趣的是 jpeg 在 Swing 中没有问题。

以下是问题发生的可能情况之一:

    /**
     * JavaFX Application
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        // opens a window with the image without issue and prints true
        var fileUrl = getClass().getResource("/freemind.png");
        
        var image = new Image(fileUrl.toExternalForm());
        var imageViewer = new ImageView(image);
        var vbox = new VBox(imageViewer);
        var scene = new Scene(vbox);
        
        primaryStage.setScene(scene);
        primaryStage.show();
        
        System.out.println(new File(fileUrl.getFile()).exists());
    }

但是当我用另一个现有的 jpg 文件替换 fileUrl 时,在同一目录中,它会打开一个空白窗口,并打印 true。

编辑2:

我找到了我不知道的-Dprism.verbose=true -Djavafx.verbose=true调试标志,它们打印了问题:

堆栈跟踪在这里

一些 JPEG 库,我不确定它是嵌入在 JavaFX SDK 中还是与操作系统相关,其版本与预期不同。现在,那是哪个图书馆,我不知道!

rpm -qa | grep -P jpe?g返回:

libjpeg-turbo-2.0.5-5.fc33.i686
libjpeg-turbo-2.0.5-5.fc33.x86_64
libjpeg-turbo-devel-2.0.5-5.fc33.x86_64
mjpegtools-libs-2.1.0-20.fc33.x86_64
openjpeg2-2.3.1-10.fc33.x86_64

标签: javajavafxjpeg

解决方案


推荐阅读