Java Swing : Read many images files without memory problems?

标签 java user-interface image swing

我正在编写一个 Java Swing 应用程序,它将从磁盘加载大约 1500 张 png 图像,每个图像的大小从 50kb 到 75kb 不等。我不需要一次加载所有这些,但我需要一次加载 50 张图像。我一直在尝试使用典型的方式加载它们:

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg")

但是我的应用程序卡住了,并且我在大约前 30 张图像后耗尽了内存。

加载这些图像的最佳方式是什么,这样我就不会使 jvm 过载,并且我将能够监视到目前为止哪些已成功加载?如果可能且有必要,我不介意应用程序在加载图像时是否显示“正在加载...”屏幕,但我不确定该怎么做。

缓存在这里有用吗?不是很懂,但是看到了this question关于使用 MediaTracker,我不确定如何在此处实现。

最佳答案

为什么不为每个图像创建一个包装器对象,按需加载它们,并利用 WeakReference s 或 SoftReference秒。这样垃圾收集器可以在必要时对图像数据进行分类,并且您可以在清除弱引用时重新加载。

好处是当需要用于其他用途时,可以清除图像的内存。缺点是您必须在显示之前重新加载图像(或者您对图像所做的任何操作)。

关于Java Swing : Read many images files without memory problems?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1658306/

相关文章:

c# - 动态菜单项中的 "System.Windows.Data Error: 4"

java - 在图表上移动鼠标时显示工具提示值

java - 是否可以动态生成看起来不错的属性对话框?

ios - 如何从我的应用程序将照片共享到Twitter应用程序?

java - 扫描仪问题 : NoSuchElementException

java - 了解 Akka 容错

java - 管理 session 属性以在所有 Web 应用程序中访问

java - 在 ejb 中使用 spring

ios - 如何解决 imgly-sdk-ios 缺少 libpods 文件的问题?

javascript - 如何用 Angular 刷新图像