Windsurf+PlantUMLでAWTエラーに遭遇した話

問題の状況

Windsurfエディタ(旧Codeium)でPlantUMLプラグインを使用していると、以下のようなエラーメッセージが表示されることがあります。

ダイアグラム"パッチ処理のクラス図"にエラーが見つかりました
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'boolean sun.awt.PlatformGraphicsInfo.hasDisplays0()'
at java.desktop/sun.awt.PlatformGraphicsInfo.hasDisplays0(Native Method)
at java.desktop/sun.awt.PlatformGraphicsInfo.hasDisplays(PlatformGraphicsInfo.java:39)
at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:91)
at java.desktop/java.awt.GraphicsEnvironment$LocalGE.createGE(GraphicsEnvironment.java:102)
at java.desktop/java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment(GraphicsEnvironment.java:82)
at java.desktop/java.awt.image.BufferedImage.createGraphics(BufferedImage.java:1182)
at net.sourceforge.plantuml.FileFormat.(FileFormat.java:90)
at net.sourceforge.plantuml.Option.(Option.java:101)
at net.sourceforge.plantuml.Run.main(Run.java:97)

このエラーは、Java AWTのネイティブメソッド「hasDisplays0()」が見つからないことを示しています。これはPlantUMLがAWTのグラフィック機能を使用する際に発生する問題です。

原因の調査

問題を調査するために「java -version」コマンドを実行すると、以下のような結果が得られました:

$ java -version
[0.028s][warning][cds] A jar file is not the one used while building the shared archive file: C:\Users\k-hayashi\AppData\Roaming\Windsurf\User\globalStorage\pleiades.java-extension-pack-jdk\java\21\lib\modules
[0.029s][warning][cds] A jar file is not the one used while building the shared archive file: C:\Users\k-hayashi\AppData\Roaming\Windsurf\User\globalStorage\pleiades.java-extension-pack-jdk\java\21\lib\modules
[0.029s][warning][cds] C:\Users\k-hayashi\AppData\Roaming\Windsurf\User\globalStorage\pleiades.java-extension-pack-jdk\java\21\lib\modules timestamp has changed.
openjdk version "21.0.6" 2025-01-21 LTS
OpenJDK Runtime Environment Temurin-21.0.6+7 (build 21.0.6+7-LTS)
OpenJDK 64-Bit Server VM Temurin-21.0.6+7 (build 21.0.7+6-LTS, mixed mode)

WindsurfはTemurin OpenJDK 21を使用していることがわかりました。

解決策

この問題は、PlantUMLのJava実行環境を変更することで解決しました。具体的には、以下の手順を実施しました:

この変更により、PlantUMLのダイアグラム生成が正常に動作するようになりました。

考察

なぜ解決したのか?

JDK 8(1.8)を使用することで問題が解決した理由としては、以下の可能性が考えられます:

また、別の解決策として、ヘッドレスモードを使用する方法もあります。設定に「-Djava.awt.headless=true」を追加することで、グラフィック環境なしでPlantUMLを実行することができます。

他のIDEとの比較

この問題はWindsurf特有のものではなく、VS Code、IntelliJ IDEA、Eclipseなど他のIDEでもPlantUMLを使う際に同様の問題が発生する可能性があります。特に、最新のJDKを使用している場合は注意が必要です。

まとめ

Windsurfエディタ(旧Codeium)でPlantUMLプラグインを使用する際にAWTの問題が発生した場合は、以下の対処法を試してみてください:

こうした問題は、Java AWTのネイティブコンポーネントとの連携に関する問題であり、Java実装やバージョンによって動作が異なる場合があります。

参考資料

著者: k-hayashi (khayashi4337@gmail.com) 日付: 2025-05-01

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS