Oracle-Javaのライセンスがうんたらかんたら、ということなのでいろんなOpenJDKディストリを使っている。
仕事の関係上、クライアント型アプリを作ることもあり、(割と簡単に)Mac・Win対応できるということでJavaで作っていた。
jarファイルのままだと関連付けの問題から使えない人が出てきたりするので大変、exeできるということでlaunch4jでexeにラップさせていたが、
それだと特定のOpenJDKでは起動しないことがわかった。
以下はその対処法。
(なお、レジストリを編集する箇所があるので例によってトラブルに責任は負えません)
lanunch4jで起動できるOpenJDKディストリ
・Amazon Coretto
・AdoptOpenJDK
けどAmazonCorettoはJavaFXのメディアサポートがまだ実装されていなかったり、Adoptの方はJavaFXがないこともあって、LibericaOpenJDKを使っている。
このLibericaはlaunch4jが動かせない。
(試してないけどzuru OpenJDKもだめみたい)
Libericaがインストールされている状態では
・JAVA_HOMEは設定されている。
・PATHにも追加されているので、コマンドプロンプトなどからjava
コマンドは使用可能
・ただしlaunch4jは「JDKがない」と言われて起動できない。
OracleJDKの公式ドキュメントより
https://docs.oracle.com/javase/jp/9/install/installation-jdk-and-jre-microsoft-windows-platforms.htm#JSJIG-GUID-47C269A3-5220-412F-9E31-4B8C37A82BFB
通常のJDKインストーラではWindowsのレジストリキーを書き込む。
launch4jは上記のレジストリキーを読み込み判断する方式のため、OpenJDKディストリによってはレジストリキーを書き込まないため動かない。
レジストリキー追加
お約束:レジストリ変更の前は念の為バックアップとりましょう。
いろいろ試したところ、このキーを追加すれば起動できた。
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment
HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8
ということで、追加のコマンド(管理者モードのコマンドプロンプトから)
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment" /v CurrentVersion /t REG_SZ /d "1.8.0_252"
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8" /v JavaHome /t REG_SZ /d "%JAVA_HOME%\jre"
一行目の"1.8.0_252"は適宜Javaのバージョンに書き換える。またパスの「1.8」の部分も同様にバージョンに合わせる。
(もしかしたらこれもいるかも)
reg add "HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment\1.8.0_252"
余談
jarがダブルクリックで立ち上がらない場合は、
HKEY_CLASSES_ROOT¥.jar
のレジストリキーを削除して、JREを再インストールするとうまくいくときがある。
参考にしたURL
https://sourceforge.net/p/launch4j/feature-requests/103/
https://github.com/AdoptOpenJDK/openjdk-installer/issues/64