我在将图像加载到我的应用程序时遇到问题。我正在尝试制作一个简单的图像浏览器。在左边我有一个文件夹列表。单击列表图像上的文件夹名称后,应出现在右侧(流窗格)。每个图像都在一个带边框的 HBox 中。但是我很快就遇到了这样的错误:
java.lang.outofmemoryerror java heap space
我查看了任务管理器——如果我只加载 6 张照片,应用程序会占用 500mb 的内存!还有一件事 - 如果我更改列表中的文件夹,内存仍然被占用。在选择另一个文件夹时,我正在创建新的 flowPane
flowPane = new FlowPane();
所以垃圾收集器应该删除所有 ImageViews 的旧的,对吗?
如何有效地管理我的应用程序中的图像?
for(int i = 0 ; i < zdjecia.length; i++){
ImageView iv2 = new ImageView();
Image image = new Image("file:"+zdjecia[i].getAbsolutePath());
iv2.setImage(image);
if( image.getHeight() > image.getWidth()){
iv2.fitHeightProperty().bind(szerokoscZdjecia.multiply(0.8).subtract(6));
}else
iv2.fitWidthProperty().bind(szerokoscZdjecia.subtract(6));
iv2.setPreserveRatio(true);
iv2.setSmooth(true);
iv2.setCache(false);
String styl = "-fx-border-color: #b2b3b3;"
+ "-fx-border-width: 2;";
HBox boxNaFotke = new HBox();
boxNaFotke.prefWidthProperty().bind(szerokoscZdjecia);
boxNaFotke.prefHeightProperty().bind(szerokoscZdjecia.multiply(0.8));
boxNaFotke.setAlignment(Pos.CENTER);
boxNaFotke.setStyle(styl);
boxNaFotke.getChildren().add(iv2);
fotki.add(boxNaFotke);
flowPane.getChildren().add(boxNaFotke);
}