1

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年以上変更されていません。では、ここで何が問題になるのでしょうか?

4

2 に答える 2

2

Freehep は未公開の内部 Java SDK メソッドを使用しています。そして、このメソッドの実装は Java バージョン 1.7 で変更されました。JDK/JRE を最新の Java リリースにアップグレードした可能性があります。

幸いなことに、これは freehep の github リポジトリで修正されています (2010 年以降の freehep リリースは見つかりませんでしたが、開発中であり、github と maven で利用できます)。

github の問題はここにあります。

Oracle Siteに関するいくつかの情報を含むバグレポート。

そのため、github から freehep インストールを更新し、再構築して、新しいライブラリを使用してください。

于 2013-05-16T10:22:27.277 に答える