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

标签 javafx libjpeg

每当我尝试在 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/

相关文章:

xcode - 使用 .jpg 纹理文件的 OpenGL 纹理映射

java - JavaFX 中的按钮对齐

java - 如何动态改变ImageView?

java - 按钮悬停时为文本添加下划线

css - 如何在看不到节点内的线的情况下绘制与文本节点相交的线

objective-c - 在 XCode 中使用 Objective C 中的 libjpeg

java - 如何在 JavaFX Cell 中绑定(bind)数据

c - libjpeg/CreateDIBSection 问题

dll - 如何构建libjpeg 9b的DLL版本?

Eclipse:LD_LIBRARY_PATH、OpenJDK 和 libjpeg