コマンドプロンプトからJAVAを実行するのに苦戦しています
JAVAの勉強を始めたときに「コマンドプロンプトではなくIDEを使ったほうが効率がいい」という記事を読んだのでEclipseを使っていました。しかし、先日Twitterでアドバイスをいただきました。
javapしたり速度実測したりするともっと良い記事になると思うよ :-) https://t.co/NvHI63pK8x
— なぎせ ゆうき (@nagise) 2017年6月22日
「javac」という言葉は初耳だったのですが実はこれコマンドプロンプトからJAVAを実行するときに使うコマンドだったんです。そして調べてみるとJAVAはコマンドプロンプトから実行させて仕組みを知ることが大切ということを知りました。その大切な部分をEclipseに任せていたばかりに簡単なHello World
さえも実行できないトラブルに遭ったのでシェアします。
最大の敵の環境変数
私はWindows7でJAVAの勉強をしています。そしてWindowsにはコマンドプロンプトというCUIが用意されています。起動方法はスタートボタンからアクセサリを選ぶかスタートボタンを押したときに表示される「プログラムとファイルの検索」のなかでcmd
と入力すれば表示されます。
起動したら目的であるJAVAの実行ファイルがある場所へと移動します。私はFドライブのProgramming\JAVA\study\src\test
フォルダにMain.javaを保存してあるのでf:
と入力してFドライブに移動したあと目的のフォルダを指定します。cd programming\java\study\src\test
と入力すると無事に移動できました。ここでjavac ファイル名.java
でコンパイルできます。
javac Main.java
と入力すると何も起きることなく、さきほどのフォルダ名が表示されました。これでコンパイルは成功です。ここでエラーがあればエラー内容が表示されます。コンパイルが成功したら拡張子を入力せずにjava ファイル名
で実行でるはずなのですがゴール手前で頭を抱える事態になりました。
java Main
と入力すると「エラー: メイン・クラスtest.Mainが見つからなかったかロードできませんでした」と表示されます。パッケージ名も入力したほうがいいという情報を見てjava test.Main
と入力しましたが全く同じエラーが返ってきます。javac
と入力するとjavac
のオプションが表示されるのでjavac
は動いているようです。javac -version
でjdkのバージョンを調べると1.8.0_131
でした。java -version
も1.8.0_131
です。これはJREとJDKのそれぞれのバージョンを表示しているらしいです。
調べた結果「環境変数」「Path」「JAVA_HOME」「クラスパス」が鍵になるようですが環境変数からPathの値を;
で区切り指定しても同じエラーに終始してしまい、検索した記事の解決策は全て試した状況なので今のところ打つ手がなく途方にくれています。気になるのはJDK
が2種類あり古い方を参照しているようなのですが環境変数を全てチェックしても、古いJDK
へのパスは見当たらないのでどうやって参照しているのかわかっていません。古いJDK
を削除すると「JDK
が見当たりません」とエラーが出るのでこれが疑わしいです。
使用PCが古く把握できていないことも多いので、この機会にWindowsを再インストールして環境をリセットするというのも、ひとつの手かもしれません。上手く解決できれば同じ原因で悩む方のヒントになったかもしれませんが今回は負け試合ということで終了です。
用語
- IDE
- CUI
- Character-based User Interfaceの略でキーボードからの入力のみでソフトウェアを操作する仕組みです
- JRE
- JAVAを動かすための環境ファイルです
- JDK
- JAVAの開発環境ファイルです
- クラスパス
- JAVAが実行されるときにファイルの検索を効率的にするために指定するパスです
- 環境変数
- OSがアプリケーションに変数を渡すことができる機能
あとがき
問題は解決していませんがコマンドプロンプトでいろいろ入力するのは楽しいです。