Jgraphx out of memory - Java

2019-08-07 04:48发布

I am trying to create an mxgraph and a image from the created mxgraph in JAVA. Below is the code to create the image from mxgraph.

BufferedImage image = mxCellRenderer.createBufferedImage(graph,
               null, 1, Color.WHITE, graphComponent.isAntiAlias(), null,
               graphComponent.getCanvas());

// Creates the URL-encoded XML data
mxCodec codec = new mxCodec();
String xml = URLEncoder.encode(mxXmlUtils.getXml(codec.encode(graph.getModel())), "UTF-8");
mxPngEncodeParam param = mxPngEncodeParam.getDefaultEncodeParam(image);
param.setCompressedText(new String[] { "mxGraphModel", xml });

//Saves as a PNG file
outputStream = new FileOutputStream(new File("graph.jpg"));

ImageIO.write(image, "jpg", outputStream);
outputStream.close();
image = null;

I am using hierarchical layout in the graph.

But I am getting the out of memory error on creating the image for larger graph.

How can i get rid of this memory issue (apart from increasing the heap size)? Is there any other alternate way to solve this problem (apart from increasing the heap size)?

1条回答
何必那么认真
2楼-- · 2019-08-07 05:41

See this post here:

http://forum.jgraph.com/questions/5408/save-as-png-detect-out-of-memory

especially the bottom part. There's a check in JGraphX which determines if there's enough memory. That one is wrong. There may not be enough memory because the GC hasn't run yet. If the GC runs, then memory would be freed and the createBufferedImage method could be successful. So instead of checking for the free memory, the memory should have just been allocated in a try { ... } catch( Error err} { ... } block.

查看更多
登录 后发表回答