アプリケーションへの画像の読み込みに問題があります。シンプルな画像ブラウザを作ろうとしています。左側にフォルダのリストがあります。リストのフォルダ名をクリックすると、右側 (フロー ペイン) に画像が表示されます。すべての画像は、境界線のある HBox にあります。しかし、次のようなエラーがすぐに発生します。
java.lang.outofmemoryerror java heap space
タスク マネージャーを見てみました。写真を 6 枚だけ読み込むと、アプリは 500 MB のメモリを消費します。そしてもう1つ-リストのフォルダーを変更すると、メモリが使用されたままになります。別のフォルダーを選択しながら、新しいフローペインを作成しています
flowPane = new FlowPane();
したがって、すべての ImageView を含む古いものは、ガベージ コレクターによって削除されるべきですよね?
アプリ内の画像を効果的に管理するにはどうすればよいですか?
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);
}