プログラミングいちねんせい

プログラミング初心者が優雅にもがく軌跡です

コマンドプロンプトからJAVAを実行するのに苦戦しています

コマンドプロンプトからJAVAを実行するのに苦戦しています

JAVAの勉強を始めたときに「コマンドプロンプトではなくIDEを使ったほうが効率がいい」という記事を読んだのでEclipseを使っていました。しかし、先日Twitterでアドバイスをいただきました。

「javac」という言葉は初耳だったのですが実はこれコマンドプロンプトからJAVAを実行するときに使うコマンドだったんです。そして調べてみるとJAVAコマンドプロンプトから実行させて仕組みを知ることが大切ということを知りました。その大切な部分をEclipseに任せていたばかりに簡単なHello Worldさえも実行できないトラブルに遭ったのでシェアします。

最大の敵の環境変数

私はWindows7JAVAの勉強をしています。そして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 -versionjdkのバージョンを調べると1.8.0_131でした。java -version1.8.0_131です。これはJREJDKのそれぞれのバージョンを表示しているらしいです。

調べた結果「環境変数」「Path」「JAVA_HOME」「クラスパス」が鍵になるようですが環境変数からPathの値を;で区切り指定しても同じエラーに終始してしまい、検索した記事の解決策は全て試した状況なので今のところ打つ手がなく途方にくれています。気になるのはJDKが2種類あり古い方を参照しているようなのですが環境変数を全てチェックしても、古いJDKへのパスは見当たらないのでどうやって参照しているのかわかっていません。古いJDKを削除すると「JDKが見当たりません」とエラーが出るのでこれが疑わしいです。

使用PCが古く把握できていないことも多いので、この機会にWindowsを再インストールして環境をリセットするというのも、ひとつの手かもしれません。上手く解決できれば同じ原因で悩む方のヒントになったかもしれませんが今回は負け試合ということで終了です。

用語

  • IDE
  • CUI
    • Character-based User Interfaceの略でキーボードからの入力のみでソフトウェアを操作する仕組みです
  • JRE
    • JAVAを動かすための環境ファイルです
  • JDK
    • JAVAの開発環境ファイルです
  • クラスパス
    • JAVAが実行されるときにファイルの検索を効率的にするために指定するパスです
  • 環境変数
    • OSがアプリケーションに変数を渡すことができる機能

あとがき

問題は解決していませんがコマンドプロンプトでいろいろ入力するのは楽しいです。