LoginSignup
0
0

More than 1 year has passed since last update.

Compose-MultiplatformでFailed to launch JVMエラーが出たときに見る記事

Posted at

なんでエラーが出たの?

java.awt.AWTError: Assistive Technology not found: com.sun.java.accessibility.AccessBridgeCaused by: java.lang.ClassNotFoundException: com.sun.java.accessibility.AccessBridge というエラーが起きている可能性があります。
その他にも開発環境では出ないようなClassNotFoundExceptionが起きている可能性があります。

Compsoe for Desktopなどでも発生するかも知れません。
このようなダイアログが出ている人もいると思います。

スクリーンショット 2023-03-11 171611.png

これらはJava のアクセシビリティ機能でスクリーンリーダーなどの機能を使えるようにするものです。

どうしたら直るの?

こういう場所があると思います。1

build.gradle.kts
compose.desktop {
    application {
        mainClass = "MainKt"
        nativeDistributions {
            targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Exe)
            packageName = "multim-gui"
            packageVersion = "1.0.0"
        }
    }
}

jdk.accessibilityを追加します。他にも追加しなければいけないものがある場合もあると思うので適宜追加してください。
gradleタスクsuggestRuntimeModulesやjdepsなどで確認することが出来ます。
(が、私の環境ではjdk.accessibilityは検出されませんでした。)

build.gradle.kts
compose.desktop {
    application {
        mainClass = "MainKt"
        nativeDistributions {
            targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb, TargetFormat.Exe)
            packageName = "multim-gui"
            packageVersion = "1.0.0"
            modules("jdk.accessibility") //←これ
        }
    }
}

これは何?

Compose-Multiplatformはexeなどを生成するとき、jlinkというものを使用します。これは簡単に言えば必要最小限のJREを生成するようなもので、とりあえず配布するときのサイズを小さくしてくれます。

このとき何が必要で何が必要ではないかを教えてあげる必要があります。その作業を手動で行うとき、jdepsで依存を検索してmodule-info.javaに書くのですが、それに相当する作業が上のmodules("module.name")です。

なおらないんだが?

まだ必要なモジュールを追加できていない可能性があります。
とりあえず動かしたい場合はincludeAllModulesフラグをtrueにセットしてあげるとすべてのモジュールをインポートしてくれます。1

当たり前ですがサイズが大きくなるので最終的にはmodulesでの指定に戻す方がいいです。

  1. https://github.com/JetBrains/compose-multiplatform/blob/master/tutorials/Native_distributions_and_local_execution/README.md#configuring-included-jdk-modules 2

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0