gpt4 book ai didi

java - 如何关闭打开的图像,java/javafx

转载 作者:行者123 更新时间:2023-12-03 23:16:08 25 4
gpt4 key购买 nike

我正在用 java 制作一个简单的图片查看器,使用 javafx
打开大约 10 张图片后,需要大量内存!

显然我需要正确关闭打开的图片(现在没有显示!)(在我的测试/用例中,图片很大!!)

这只是一段代码...
但这是需要知道的一切

private HashMap<Image, String> adrs;     // a hashMap from thumbNail to address of the image
ObservableList<ImageView> list; // list of thumbNails
@FXML public ListView<ImageView> pics;
@FXML public ImageView preview;

public void init(String[] picAdrs){

loadThumbNails(picAdrs); // initializes thumbNails (list)
pics.setItems(list);

pics.getSelectionModel().selectedItemProperty().addListener((v, oldvalue, newvalue) -> {
// --> this is where the previous value of "preview.getImage()" should be closed <--
// (and i don't know how!)
preview.setImage( new Image(adrs.get(newvalue.getImage()));
// and more (not related codes...)
}
}

private void loadThumbNails(String[] picAdrs){
// initializing list & adrs
for(String i : picAdrs){

Image img = new Image(new File(i).toURI().toString(), 200, 0, true, false);
ImageView iv = new ImageView();
iv.setImage(img);

adrs.put(img, new File(i).toURI().toString());
list.add(iv);
}


}

缩略图在左侧,“预览”在右侧:
Just a preview of the Scene

因为它看起来真的很简单! ...将不胜感激一个简单的方法!
顺便说一句......代码有效,它只是关于我评论的部分

我使用垃圾收集器减少了大约 50% 的内存使用量,但我仍然想要更好的方法,因为我知道 system.gc 不可靠

这是打开 30 张缩略图和一张全画质图片的日志:
enter image description here

最佳答案

您需要删除对图像的所有引用。 ImageView 中存在对 Image 的引用,因此您还需要删除对 ImageView 的任何引用,或者将 ImageView 中的图像字段设置为 null。

我在您的代码中看到三个集合,其中对 Image 或 ImageView 的引用可能会持续存在。

private HashMap<Image, String> adrs;     // a hashMap from thumbNail to address of the image
ObservableList<ImageView> list; // list of thumbNails
@FXML public ListView<ImageView> pics;

您将不得不找到一种方法从这些集合中删除这些对象。只要他们在那里,他们就会占用内存。

我会考虑做的不是存储 Image 和 ImageView 对象本身,而是存储它们的 URL。 URL 可以指向文件或 http 位置。然后实时加载。如果您想提前加载所有内容,那么 ram 使用就是成本。

此外,在您旅行期间,请查看 WeakHashMap。这是一个将为您删除旧引用的 map ,这将释放您的内存。这样一来,您只需专注于将图像/ ImageView 添加到您的集合中,然后让 Java 的 WeakHashMap 删除它们。

关于java - 如何关闭打开的图像,java/javafx,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35938258/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com