Выполнение приведенного ниже кода на уже построенном графе (с использованием ArbEdge.class в качестве ребер)
Graph<String, ArbEdge> graph = new DefaultDirectedWeightedGraph<>(ArbEdge.class);
public void pngGraph() {
JGraphXAdapter<String, ArbEdge> graphAdapter =
new JGraphXAdapter<String, ArbEdge>(this.getGraph());
mxIGraphLayout layout = new mxCircleLayout(graphAdapter);
// mxParallelEdgeLayout layout = new mxParallelEdgeLayout(graphAdapter);
layout.execute(graphAdapter.getDefaultParent());
BufferedImage image =
mxCellRenderer.createBufferedImage(graphAdapter, null, 2.5, Color.WHITE, true, null);
try {
ImageIO.write(image, "PNG", imgFile);
} catch (IOException e) {
e.printStackTrace();
}
}
Чтобы сделать перекрывающийся текст на краях читаемым, я попробовал mxParallelEdgeLayout layout = new mxParallelEdgeLayout(graphAdapter);
, как это было предложено в Перекрытие краев с JGraphx
но это навело меня на подозрение
java.lang.IllegalArgumentException: image == null!
at java.desktop/javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925) ~[na:na]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
|_ checkpoint ⇢ HTTP GET "/png" [ExceptionHandlingWebHandler]
который указывает на строку ImageIO.write(image, "PNG", imgFile);
.. которая отлично работает с использованием mxCircleLayout.
Как сделать края удобочитаемыми для человека?
Почему ParallelEdgeLayout нарушает работу ImageIO.write?