openJFX 環境構築時のつまづきと対処

プログラミング

概要

  • PC内に複数のJavaがインストールされており,それらにPATHが通っている場合は, コマンドの呼出優先順序に気を付けよう.
  • また,すでにアンインストールしていても,PC内に残ってしまうコマンドが存在するので注意しよう.

2019/10/20 20時過ぎ,『やさしいJava 活用編 第6版』を参考に,JavaのGUIアプリを作ってみようと思い立つ.

使用したGUIライブラリはJavaFX 11である.

javaFXどころか,javaのプログラミング自体したことないので,とりあえずJDK 11(気分的にFXと同じヴァージョンを選んだ)をインストールしてポチポチした.

本の通り進めたが,さっそくトラブル発生.

本書によると,javafxアプリケーションをコンパイルするときは,以下のように書けばよいという.

javac -p <ライブラリを配置した場所> --add-modules <必要な追加モジュール名> <ソースファイル名>

次に,生成されたclassファイルを実行するときは,以下のようにせよと.

java -p <ライブラリを配置した場所> --add-modules <必要な追加モジュール名> <クラス名>

サンプルプログラムもコマンドも同様に記述した.
javacによるコンパイルはうまく通ったようだ.
しかし,javaコマンドでつまづいた.

エラーメッセージによると,

Unrecognized option: -p
Error: could not create the Java Virtual Machine.
Error: A fatal exception has occured. Program will exit.

コマンドオプション「-p」が使えんと?
javacでは問題なかったのに?

本にはこの問題について記述がなかったため,ネットでサーフィンしまくった.

しかし,なかなか有用な解決策は載っておらず,マジで困った.
(さいさき悪すぎやん~~)

JDKとjavaFXのversion非互換とかも疑い,色々再インストールして様々なパターンを試したけど,うまくいかず.

結局,問題が特定できたのは夜の12時過ぎ.

原因は,以前インストールしていた(そして現在は削除済みの)JDK 8の残骸である.

かなり昔にアンインストールしたと思うが,なぜか以下の場所にアプリケーションとして残っていた.

C:\Program Files (x86)\Common Files\Oracle\Java\javapath

ちなみに,この残存フォルダ内にjavacコマンドはない.

つまり,何が起こっていたかというと,javacコマンドは本日インストールしたものが呼び出されていたのだが,javaコマンドは昔インストールしたものが呼び出されていたのだ.

また,残存javaは,システム環境変数のトップレベルに位置しているため,ユーザー環境変数を弄っても意味がなかったのだ.
(→常に呼出優先順位が先のため,後から再インストールして再度PATHを通してもダメ)

そこで,残存しているjavaフォルダをリネームした.
(削除しても大丈夫かどうか,なんとなく不安だったから)

すると,javaコマンドも本日インストールしたものが呼び出されるようになり,問題は解決した.

ちなみに,javaコマンド等の実体の場所は,コマンドプロンプトにおいて以下のコマンドで確認できる.

where java 
where javac

プログラミング

Posted by タロック