gpt4 book ai didi

Java ImageIO 删除图像后不会释放内存

转载 作者:行者123 更新时间:2023-12-02 01:21:26 25 4
gpt4 key购买 nike

我有一个程序可以打开一些 8k 图像并将其大小调整为 200x200 像素。该程序工作正常,但问题是关闭每个图像后它不会释放内存,因此它会很快耗尽内存! (大约 40 张图像之后)

我尝试使用 system.gc() 刷新图像并将图像设置为 null,而且我无法使用 ImageReader,因为图像格式不正确,并且表示不是以 0x01 0x11 和其他一些数字开头的 jpeg 图像。启用禁用 ImageIO.usecatch 也无济于事。我尝试对图像使用全局变量,但它也没有帮助。

我需要在线程中运行程序,但在编辑一些图像后,即使在单个线程上,它也会使用太多内存。我删除了我确认与问题无关的额外代码部分。

static public class ImageLoadingTask implements Callable<JPanel> {

private final URL url;
private final int i;
private final JPanel scrollPane;

ImageLoadingTask(int i, URL url, JPanel scrollPane) {
this.url = url;
this.i = i;
this.scrollPane = scrollPane;
}

@Override
public JPanel call() {
try {
BufferedImage image = ImageIO.read(url);
ImageIcon icon = new ImageIcon(setImage(image));
image.flush();
image = null;
jPanels[i] = new JPanel();
jPanels[i].setLayout(new BoxLayout(jPanels[i],
BoxLayout.Y_AXIS));
JLabel label = new JLabel();
label.setIcon(icon);
icon = null;
jPanels[i].add(label);
String name = "date";
if (name.length() > 35) {
name = name.substring(0, 32) + "...";
}
JLabel jLabel = new JLabel(name);
jPanels[i].add(jLabel);
scrollPane.add(jPanels[i]);
latch.countDown();
return jPanels[i];
} catch (Exception ex) {
ex.printStackTrace();
latch.countDown();
demo.infoBox("Failed to open file maybe file is open?",
"Error");
return new JPanel();
}

private static Image setImage(BufferedImage source) {
int height = 150;
int width = 150;
if (source.getHeight() / height > source.getWidth() / width) {
return source.getScaledInstance(source.getWidth() * height /
source.getHeight(), height, Image.SCALE_SMOOTH);
} else {
return source.getScaledInstance(width, source.getHeight() * width
/ source.getWidth(), Image.SCALE_SMOOTH);
}
}

最佳答案

我只是用以下代码打开图像,它解决了我的问题!

工具包工具包 = Toolkit.getDefaultToolkit();图片 image = toolkit.getImage(url.getPath());

关于Java ImageIO 删除图像后不会释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57621968/

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