gpt4 book ai didi

javafx - 我怎样才能解决这个问题? JavaFX - 错误的 JPEG 库版本 : library is 80, 调用者期望 70

转载 作者:行者123 更新时间:2023-12-04 16:07:33 25 4
gpt4 key购买 nike

每当我尝试在 JavaFX 中创建图像时都会收到此错误。绝对没有图像正在加载,但 UI 上的其他所有内容都在加载。我唯一一次看到这个是在 prism.verbose=true 的时候

StackOverflow 上类似问题的其他答案建议重新安装 libjpeg。但是当我这样做时 sudo apt-get remove libjpeg8 ,它试图删除值(value) 4 GB 的软件包,这些软件包看起来非常重要。

有没有其他人经历过这种情况并找到了一个不需要我重新安装整个操作系统的可行解决方案?

这是整个堆栈跟踪:

java.io.IOException: Wrong JPEG library version: library is 80, caller expects 70
at com.sun.javafx.iio.jpeg.JPEGImageLoader.initDecompressor(Native Method)
at com.sun.javafx.iio.jpeg.JPEGImageLoader.<init>(JPEGImageLoader.java:187)
at com.sun.javafx.iio.jpeg.JPEGImageLoaderFactory.createImageLoader(JPEGImageLoaderFactory.java:49)
at com.sun.javafx.iio.ImageStorage.getLoaderBySignature(ImageStorage.java:419)
at com.sun.javafx.iio.ImageStorage.loadAll(ImageStorage.java:266)
at com.sun.javafx.tk.quantum.PrismImageLoader2.loadAll(PrismImageLoader2.java:142)
at com.sun.javafx.tk.quantum.PrismImageLoader2.<init>(PrismImageLoader2.java:77)
at com.sun.javafx.tk.quantum.PrismImageLoader2$AsyncImageLoader.processStream(PrismImageLoader2.java:252)
at com.sun.javafx.tk.quantum.PrismImageLoader2$AsyncImageLoader.processStream(PrismImageLoader2.java:225)
at com.sun.javafx.runtime.async.AbstractRemoteResource.call(AbstractRemoteResource.java:109)
at com.sun.javafx.tk.quantum.PrismImageLoader2$AsyncImageLoader.access$201(PrismImageLoader2.java:225)
at com.sun.javafx.tk.quantum.PrismImageLoader2$AsyncImageLoader.lambda$call$428(PrismImageLoader2.java:259)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.tk.quantum.PrismImageLoader2$AsyncImageLoader.call(PrismImageLoader2.java:258)
at com.sun.javafx.tk.quantum.PrismImageLoader2$AsyncImageLoader.call(PrismImageLoader2.java:225)
at com.sun.javafx.runtime.async.AbstractAsyncOperation.lambda$new$272(AbstractAsyncOperation.java:57)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

这是我的 java 版本信息。我正在使用 Oracle 版本。
java version "1.8.0_72"
Java(TM) SE Runtime Environment (build 1.8.0_72-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.72-b15, mixed mode)

编辑:

我跑了 strace在我的应用程序上,看起来有些东西只专门搜索 libjpeg 8。它根本不会尝试寻找任何默认的 libjpeg 库或 libjpeg 7。

最佳答案

一个可能的解决方法是不让 JPEGImageLoader解码 jpeg,而是使用 ImageIO反而。您失去了 javafx Image 的一些内置功能,这些功能只能通过构造函数参数使用,例如 smooth , preserveRatio , backgroundLoading但至少它在 linux 上更安全。
像这样的事情可能对你有用:

import java.awt.image.BufferedImage;
import javafx.embed.swing.SwingFXUtils;
import javafx.scene.image.Image;
import javafx.scene.image.WritableImage;

public static Image createImage(File file) throws IOException {
BufferedImage bufferedImage = ImageIO.read(file);
WritableImage writableImage = SwingFXUtils.toFXImage(bufferedImage, null);
if (writableImage.isError()) {
throw new RuntimeException(writableImage.getException());
}
return writableImage;
}

关于javafx - 我怎样才能解决这个问题? JavaFX - 错误的 JPEG 库版本 : library is 80, 调用者期望 70,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35606556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com