Я использую JGraphX для построения диаграмм рабочих процессов разного размера. Я столкнулся с проблемой: как только я попал в определенное количество ячеек, метод mxCellRenderer createBufferedImage() завершается с ошибкой OutOfMemoryError. JGraphX правильно отображает диаграмму в Swing JFrame, независимо от того, правильно она сохраняется или нет.
Есть ли известный обходной путь или модификация класса и/или методов, позволяющие использовать большие изображения?
Пример кода:
public void generatePNG() throws IOException {
BufferedImage image = mxCellRenderer.createBufferedImage(graph, null, 1, Color.WHITE, true, null);
ImageIO.write(image, "PNG", new File(path + "-" + name + ".png"));
}
Полученная трассировка стека:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.awt.image.DataBufferInt.<init>(Unknown Source)
at java.awt.image.Raster.createPackedRaster(Unknown Source)
at java.awt.image.DirectColorModel.createCompatibleWritableRaster(Unknown Source)
at java.awt.image.BufferedImage.<init>(Unknown Source)
at com.mxgraph.util.mxUtils.createBufferedImage(Unknown Source)
at com.mxgraph.util.mxUtils.createBufferedImage(Unknown Source)
at com.mxgraph.canvas.mxImageCanvas.<init>(Unknown Source)
at com.mxgraph.canvas.mxImageCanvas.<init>(Unknown Source)
at com.mxgraph.util.mxCellRenderer$1.createCanvas(Unknown Source)
at com.mxgraph.util.mxCellRenderer.drawCells(Unknown Source)
at com.mxgraph.util.mxCellRenderer.createBufferedImage(Unknown Source)
at com.mxgraph.util.mxCellRenderer.createBufferedImage(Unknown Source)
Этот же метод отлично работает для «меньших» диаграмм (включая некоторые довольно большие), но как только он достигает определенного предела, никакое увеличение пространства кучи не помогает.
Единственный другой вопрос, связанный с этим, который я нашел, - это более старый вопрос, на который действительно не было удовлетворительного ответа: Jgraphx не хватает памяти - Java
Любая помощь будет оценена по достоинству!
TYPE_BYTE_BINARY
илиTYPE_BYTE_INDEXED
? Подробнее здесь. - person trashgod   schedule 11.07.2017