Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我怎样才能解决这个问题?JavaFX-错误的JPEG库版本:库为80,调用方预期为70_Javafx_Libjpeg - Fatal编程技术网

我怎样才能解决这个问题?JavaFX-错误的JPEG库版本:库为80,调用方预期为70

我怎样才能解决这个问题?JavaFX-错误的JPEG库版本:库为80,调用方预期为70,javafx,libjpeg,Javafx,Libjpeg,每当我试图在JavaFX中创建一个图像时,就会出现这个错误。绝对没有图像正在加载,但UI上的所有其他内容都在加载。我唯一一次看到这种情况是在prism.verbose=true StackOverflow上类似问题的其他答案建议重新安装libjpeg。但是当我执行sudo apt获取remove libjpeg8时,它会尝试删除价值4 GB的包,这些包看起来非常重要 有没有其他人经历过这种情况并找到了一个可行的解决方案,而不需要我重新安装整个操作系统 以下是整个stacktrace: java.

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

StackOverflow上类似问题的其他答案建议重新安装libjpeg。但是当我执行
sudo apt获取remove libjpeg8
时,它会尝试删除价值4 GB的包,这些包看起来非常重要

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

以下是整个stacktrace:

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)
编辑:


我在我的应用程序上运行了
strace
,似乎有什么东西专门搜索libjpeg 8。它从未尝试寻找任何默认的libjpeg库或libjpeg 7。

我认为Java与libjpeg 7相链接,但您的LD_library_路径中可能有libjpeg 8,因此接口不匹配

libjpeg.so
随Java一起提供(在x64系统的lib/amd64文件夹中),但可能由于LD_LIBRARY_路径中存在重写,因此未使用此功能。

一个可能的解决方法是不让
JPEGImageLoader
解码JPEG,而是使用
ImageIO
来执行此操作。您失去了javafx映像的一些内置功能,这些功能只能通过构造函数参数使用,例如
smooth
preserveRatio
backgroundload
,但至少在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;
}

看起来你在运行Debian衍生工具。您使用的是OpenJDK还是Oracle的JDK?如果您使用的是OpenJDK,您可能希望尝试切换:sudo sudo add apt repository ppa:webupd8team/java&&sudo apt get update&&sudo apt get install oracle-java8-installer&&sudo apt get install oracle-java8-set-default我正在使用oracle的JDK。我还用我的版本信息更新了我的问题。你能试着安装libjpeg7,看看这是否解决了问题吗?我的包管理器的repos中没有看到libjpeg7。只有libjpeg62和libjpeg8。我在采用OpenJDK 11.0.10、turbojpeg(80)的Arch上具有相同的行为<代码>错误的JPEG库版本:库是80,调用方期望90我的
LD_库路径中唯一的东西是我的IDE中的
/usr/local/IntelliJ-15.0.3/bin
。它只包含几个.so文件。两者都不是libjpeg。但是我确实在我的jre的bin中看到了libjpeg.so文件。那么你是从IntelliJ和捆绑的jre运行这个文件的?使用系统安装的Oracle JRE运行时有什么不同吗?我选择使用系统的JRE来运行项目。我还尝试在IDE之外使用终端上的Gradle运行项目,同样的事情也发生了。不过我上班的时候会再检查一遍。
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;
}