如何解决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
调试标志,这是我不知道的,它们打印出了问题:
一些 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 举报,一经查实,本站将立刻删除。