微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JavaFX 不显示 JPG 文件

如何解决JavaFX 不显示 JPG 文件

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

  • 我尝试过不同的 jpg 文件。它没有用。
  • 我尝试了不同的图像扩展(png、gif)。它确实起作用了。

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

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

可能导致这种行为的原因是什么?

编辑 1:

对我来说,JavaFX 上没有任何涉及 jpeg 的东西。我是否尝试使用 jpeg 作为背景图像,就像这样 Oracle's sample,或者在 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 调试标志,这是我不知道的,它们打印出了问题:

Stack trace here

一些 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。