每当我尝试在JavaFX中创建一个Image时,都会收到此错误。绝对没有加载图像,但UI上的其他所有内容都是。我唯一一次看到这是<?php
if($_product->getAttributeText('merchant_name')) {
$name = $_product->getResource()->getAttribute('merchant_name')->getFrontend()->getValue($_product);
} else {
$name = "XXXXX";
}
?>
<div class="Merchant_Name">By <?php echo $name ?>
StackOverflow上类似问题的其他答案建议重新安装libjpeg。但是,当我prism.verbose=true
时,它会尝试删除看似非常重要的4 GB的软件包。
是否有其他人遇到过此问题并找到了一个可行的解决方案,并不是要求我重新安装整个操作系统?
这是整个堆栈跟踪:
sudo apt-get remove libjpeg8
这是我的java版本信息。我使用的是Oracle版本。
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 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)
,看起来有些东西只是专门搜索libjpeg 8。它根本不想尝试任何默认的libjpeg库或libjpeg 7。
答案 0 :(得分:2)
一种可能的解决方法是不让 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;
}
答案 1 :(得分:0)
我认为Java是与libjpeg7链接的,但你的LD_LIBRARY_PATH可能有libjpeg8,所以界面不匹配。
libjpeg.so
附带Java(在x64系统的lib / amd64文件夹中),但这可能不是因为LD_LIBRARY_PATH中的覆盖而使用。