* Windsurf+PlantUMLでAWTエラーに遭遇した話 [#g521819a]

** 問題の状況 [#a0414950]

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のグラフィック機能を使用する際に発生する問題です。

** 原因の調査 [#gf7f21e0]

問題を調査するために「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を使用していることがわかりました。

** 解決策 [#p6898e85]

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

- 1. Windsurfの設定を開く
- 2. PlantUMLプラグインの設定を探す
- 3. Javaの実行環境を以下のパスに変更:
   "C:\Program Files\Java\jdk1.8.0_281\bin\java.exe"
- 4. Windsurfを再起動

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

** 考察 [#b93f300c]

*** なぜ解決したのか? [#o4b8ede5]

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

- 1. JDK 8はAWTの実装がより安定しており、PlantUMLとの互換性が高い
- 2. 最新のJDK(特にJDK 21)では、セキュリティやモジュール化の観点からAWTの実装が変更されている
- 3. PlantUMLが内部的にJDK 8との互換性を前提に設計されている可能性がある

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

*** 他のIDEとの比較 [#j738817f]

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

** まとめ [#pb45ed77]

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

- 1. PlantUMLのJava実行環境をJDK 8に変更する
- 2. または、PlantUMLの設定でヘッドレスモード(-Djava.awt.headless=true)を有効にする

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

** 参考資料 [#v3edc047]

- PlantUML公式FAQ: https://plantuml.com/faq
- PlantUMLインストールFAQ: https://plantuml.com/faq-install
- GraalVM Issue #2729: https://github.com/oracle/graal/issues/2729
- Java AWTヘッドレスモードについて: https://www.oracle.com/technical-resources/articles/javase/headless.html

著者: k-hayashi (khayashi4337@gmail.com)  
著者: k-hayashi (khayashi4337@gmail.com) 
 
日付: 2025-05-01
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS