[英]Memory leak while scaling image as background in java swing
所以,我正在尝试编写一个 function 来缩放图像并将其用作背景,但它分配了很多 memory 并且几秒钟后引发了 out of memory 异常。 这是无限循环内的 function。
public static void scale() {
JLabel background = new JLabel();
Image imgscale = img.getScaledInstance(back.getWidth(), back.getHeight(), Image.SCALE_SMOOTH);
ImageIcon backgroundImage = new ImageIcon(imgscale);
background.setIcon(backgroundImage);
background.setSize(back.getWidth(), back.getHeight());
jlayeredpane1.add(background, Integer.valueOf(0));
jlayeredpane1.remove(background);
frame.setVisible(true);
}
无限循环内的 function。
等等,什么??
public static void scale() {
JLabel background = new JLabel();
Image imgscale = img.getScaledInstance(back.getWidth(), back.getHeight(), Image.SCALE_SMOOTH);
ImageIcon backgroundImage = new ImageIcon(imgscale);
background.setIcon(backgroundImage);
background.setSize(back.getWidth(), back.getHeight());
jlayeredpane1.add(background, Integer.valueOf(0));
jlayeredpane1.remove(background);
frame.setVisible(true);
}
想一想,每次调用此方法时,您都是...
JLabel
的新实例( background
)img
实例,按比例缩小ImageIcon
实例来环绕Image
ImageIcon
应用于JLabel
JLabel
实例添加到JLayeredPane
JLayeredPane
中删除您刚刚创建的JLabel
实例……等等,什么? 您想知道为什么 memory 用完了吗?! 我什至没有提到这是在static
上下文中完成的。
添加,如果您在事件调度线程的上下文中执行此操作,您将导致 UI“冻结”,如果您不在事件调度线程的上下文中执行此操作,那么您再次违反 API,因为 Swing 不是线程安全的。
我建议看看类似...
关于如何实现目标的一些更好的想法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.