JUNG2 を使用して大きなグラフを視覚化するアプレットがあります。しばらく前に、ユーザーがグラフをベクトルベースの画像にエクスポートできるようにするエクスポート機能を追加することができました。今回はFreeHEP ライブラリを利用しています。それはすべてうまくスムーズに機能しました(出版物で PDF エクスポートを使用したことさえあります)。
グラフをエクスポートしようとすると、アプレットがクラッシュするようです。Javaコンソールを掘り下げると、ライブラリの奥深くにあるNPEが原因であることがわかりました。以下は、スタック トレースの関連部分です。
Exception in thread "AWT-EventQueue-2" java.lang.ExceptionInInitializerError
at org.freehep.graphicsio.gif.GIFImageWriteParam.<init>(GIFImageWriteParam.java:28)
at org.freehep.graphicsio.gif.GIFImageWriter.getDefaultWriteParam(GIFImageWriter.java:73)
at org.freehep.graphicsio.exportchooser.ImageExportFileType.<init>(ImageExportFileType.java:71)
at org.freehep.graphicsio.exportchooser.ImageIOExportFileType.onRegistration(ImageIOExportFileType.java:50)
at javax.imageio.spi.SubRegistry.registerServiceProvider(ServiceRegistry.java:715)
at javax.imageio.spi.ServiceRegistry.registerServiceProvider(ServiceRegistry.java:302)
at org.freehep.util.export.ExportFileTypeRegistry.addApplicationClasspathExportFileTypes(ExportFileTypeRegistry.java:122)
at org.freehep.util.export.ExportFileTypeRegistry.getDefaultInstance(ExportFileTypeRegistry.java:50)
at org.freehep.util.export.ExportFileType.getExportFileTypes(ExportFileType.java:181)
at org.freehep.util.export.ExportFileType.getExportFileTypes(ExportFileType.java:173)
at org.freehep.util.export.ExportDialog.addAllExportFileTypes(ExportDialog.java:64)
at org.freehep.util.export.ExportDialog.<init>(ExportDialog.java:130)
at org.freehep.util.export.ExportDialog.<init>(ExportDialog.java:90)
at org.freehep.util.export.ExportDialog.<init>(ExportDialog.java:82)
at myproject.visualization.ExtendedModelGraphMouse$ExportActionListener.actionPerformed(ExtendedModelGraphMouse.java:167)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
...
Caused by: java.lang.NullPointerException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.freehep.graphics2d.PixelGraphics2D.<clinit>(PixelGraphics2D.java:101)
... 53 more
私はFreeHEP ライブラリ(Grep Code でホストされている)のソース コードを掘り下げてきました。スタック トレースの最後の行 (一番上) は、で始まる行を指しています。UserProperties
public GIFImageWriteParam(Locale locale) {
super(locale);
canWriteProgressive = true;
progressiveMode = MODE_DEFAULT;
UserProperties def = new UserProperties(GIFGraphics2D
.getDefaultProperties());
quantizeColors = def.isProperty(GIFGraphics2D.QUANTIZE_COLORS);
quantizeMode = def.getProperty(GIFGraphics2D.QUANTIZE_MODE);
}
私が解読できることから、これは次のことを意味するはずですGIFGraphics2D
-null
なぜ、私にはわかりません。ビルドファイルを再確認して、必要なライブラリが配置されていることを確認しました。ビルドファイルも、を使用するコードExportDialog
(質問本文の最初のリンクを参照)も1年以上変更されていません。では、ここで何が問題になるのでしょうか?