使用JavaFX构建imageView时,为什么会出现ArrayIndexOutOfBoundsException?

时间:2019-03-02 21:28:16

标签: exception javafx

我在JavaFx应用程序中有多个插入图像的位置(png / gif)。通常,只有一个例外。我的工作:

  • 我将图像放在资源下的特定目录中。
  • 我这样加载它们:

    ImageView openView =新的ImageView(“ / pics / logo.png”);

一种可行的替代方法是:

InputStream resourceAsStream = classParameter.getResourceAsStream("/pics/logo.png");
Image image = new Image(resourceAsStream);
ImageView openView = new ImageView(image);

问题: 有一个gif具有白色背景。当我将其插入应用程序时,它可以工作,但是如果在转换后插入相同的gif(以增加背景的透明度),我会得到:

ObjectProperty [bean: javafx.scene.image.Image@2ac5919d, name: exception, value: java.lang.ArrayIndexOutOfBoundsException: 4096]

如果打开查看,按预期显示转换后的gif。

关于为什么会引发此异常的任何想法?

堆栈跟踪:

java.lang.ArrayIndexOutOfBoundsException: 4096
    at com.sun.javafx.iio.gif.GIFImageLoader2$LZWDecoder.readString(GIFImageLoader2.java:388)
    at com.sun.javafx.iio.gif.GIFImageLoader2.decodeImage(GIFImageLoader2.java:148)
    at com.sun.javafx.iio.gif.GIFImageLoader2.load(GIFImageLoader2.java:209)
    at com.sun.javafx.iio.ImageStorage.loadAll(ImageStorage.java:368)
    at com.sun.javafx.iio.ImageStorage.loadAll(ImageStorage.java:328)
    at com.sun.javafx.tk.quantum.PrismImageLoader2.loadAll(PrismImageLoader2.java:119)
    at com.sun.javafx.tk.quantum.PrismImageLoader2.<init>(PrismImageLoader2.java:70)
    at com.sun.javafx.tk.quantum.QuantumToolkit.loadImage(QuantumToolkit.java:648)
    at javafx.scene.image.Image.loadImage(Image.java:1036)
    at javafx.scene.image.Image.initialize(Image.java:785)
    at javafx.scene.image.Image.<init>(Image.java:599)
    at javafx.scene.image.ImageView.<init>(ImageView.java:167)
    at helpers.Helpers.setImageView(Helpers.java:173)

1 个答案:

答案 0 :(得分:0)

我设法通过使用另一个gif编辑工具使其工作。所以问题是转换。即使最初的gif看起来不错,在引擎盖下它也会使JavaFx崩溃。 (这里不会共享有效和无效工具的名称,因为它可能违反了堆栈溢出策略。)