带有动画GIF的JavaFX OutOfMemoryError
我正在创建一个JavaFX2.0应用程序,该应用程序具有一个图像浏览器,当我在浏览多个GIF后遇到一些异常时,它应该能够显示动画GIF。我设法将相关代码隔离到一个“GifCrasher”应用程序中:带有动画GIF的JavaFX OutOfMemoryError,java,javafx-2,out-of-memory,animated-gif,Java,Javafx 2,Out Of Memory,Animated Gif,我正在创建一个JavaFX2.0应用程序,该应用程序具有一个图像浏览器,当我在浏览多个GIF后遇到一些异常时,它应该能够显示动画GIF。我设法将相关代码隔离到一个“GifCrasher”应用程序中: import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import javafx.scene.image.Image; publi
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import javafx.scene.image.Image;
public class GifCrash {
// Settings:
private static long waitTime = 100; // msec
private static ArrayList<File> imageFiles = new ArrayList<File>() {{
add(new File("thrillercat.gif"));
}};
// Other:
private static long totalSize = 0;
private static long gifsLoaded = 0;
public static void main(String[] args) throws Exception {
while(!Thread.currentThread().isInterrupted()) {
// Read gif file:
File imageFile = GifCrash.imageFiles.get((int) (GifCrash.gifsLoaded % GifCrash.imageFiles.size()));
InputStream iStream = new FileInputStream(imageFile);
Image image = new Image(iStream);
iStream.close();
// Display info:
GifCrash.gifsLoaded++;
GifCrash.totalSize += imageFile.length();
System.out.println("Loaded " + imageFile + " (" + imageFile.length() + " bytes)");
System.out.println("GifCount\t=\t" + GifCrash.gifsLoaded);
System.out.println("TotalSize\t=\t" + Math.round((double) GifCrash.totalSize / (1024 * 1024)) + " MBytes (" + GifCrash.totalSize + " bytes)");
System.out.println();
// Wait?
if (GifCrash.waitTime > 0) {
Thread.sleep(GifCrash.waitTime);
}
}
}
}
像往常一样,我假设这是由于我的代码中的一些错误而不是一个bug,那么我在这里做错了什么呢
如果这是一个bug,有没有办法解决它?i、 e.我需要能够在JavaFX窗口中显示大量动画GIF(一次只能看到一个GIF)
谢谢 只要使用,您的示例程序就可以使用Java 8版本
我在Java 7u45(OS X 10.8)(MacBook Air 2012,4gb ram)上尝试了这个示例程序,经过71次迭代后,它的内存始终不足
而对于Java 8,程序在运行5000次迭代后从未耗尽内存:
Loaded /Users/lilyshard/dev/playfx/src/thriller-cat-o.gif (1203120 bytes)
GifCount = 10000
TotalSize = 11474 MBytes (12031200000 bytes)
我没有让您的程序在Java7U45上运行的变通方法,而且在Java8分支上进行的错误修复不太可能被移植到JavaFX2.2。有时,bug修复会在用户请求时通过JavaFX问题跟踪器进行后端口,但这种情况很少发生
我的猜测是,JavaFX2.2 gif加载器中存在一些错误,这些错误已在准备Java 8发行版时修复。谢谢您的回答!嗯,这很不幸,我会等到Java8成为当前版本。
Loaded /Users/lilyshard/dev/playfx/src/thriller-cat-o.gif (1203120 bytes)
GifCount = 10000
TotalSize = 11474 MBytes (12031200000 bytes)