1

在我的 java GUI 应用程序中,我有一些需要重复扩展的组件,我使用以下代码执行此操作:

Image newImage = myimage.getScaledInstance(width, height, Image.SCALE_REPLICATE);

ImageIcon newIcon = new ImageIcon(newImage);

this.setIcon(newIcon);

this.setSize(width,height);

//increment width, height

起初这工作正常,但经过多次迭代(几百次)后,基于一些简单的时间检查,新的 ImageIcon() 构造函数花费了过多的时间(大约 1 秒)。其余的代码很快。

为什么在多次迭代后会发生这种情况,我怎样才能让它随着迭代的增加而停止减速?(在后台线程中加载图像是行不通的,因为加载图像不是一个固定时间的操作)。

4

2 回答 2

2

看看Image.getScaledInstance() 的危险。这可能不是这里的问题,但在尝试替代方案之前你不会知道。

于 2011-04-17T22:15:22.680 回答
0

我记得以前的 Q/A 中图像加载会导致内存问题。我认为您需要追求这是内存泄漏的理论:

  • 通过在启用 GC 日志记录的情况下运行 JVM 来确认这是问题所在,并查看日志消息和观察到的减速之间是否存在某种相关性。(以一种或另一种方式确认应该需要一分钟左右的时间。)

  • 使用您最喜欢的内存分析器尝试追踪泄漏。

于 2011-04-17T23:13:12.270 回答