質問: Runtime.getRuntime().exec(cmdline); System.out.println("起動しました。"); proc.waitFor(); // 終了を待つ System.out.println("終了しました。"); } catch( SecurityException e) { System.out.println("セキュリティマネージャがサブプロセスの作成を許可しません。"); } catch( IOException e ) { System.out.println("入出力エラーが発生しました。"); } catch( NullPointerException e ) { System.out.println("コマンドラインがnullです。"); } catch( IllegalArgumentException e ) { System.out.println("コマンドが指定されていません。"); } catch( Exception e ) { System.out.println("エラーです。" + e.getMessage()); } } } ```
回答: javaコマンドでパッケージtopic22にあるクラスAnimeClockのmainメソッドを動かしたい場合は `java topic22.AnimeClock` と書くことになっています。普段Eclipseなどを使ってアプリケーションを動かすときあまりこういうことを意識しないかも知れませんが、Javaを学ぶなら「必ず知ってなければならない常識」といってもよい仕様なので覚えておきましょう。ちなみに `java AnimeClock` と書くと「デフォルトパッケージのAnimeClockクラス」と解釈されてしまいます。 追記: Eclipseからexecprogを起動するとカレントディレクトリーはプロジェクトディレクトリーになっていると思います。それはmainメソッドの中に `System.out.printf("current directory = %s%n", System.getProperty("user.dir"));` と書いておくと確認できます。多分 `"C:\pleiades\eclipse\JavaFX_topic` と表示されることでしょう。さて、この状態で `java topic22.AnimeClock` を実行してjavaコマンドを起動したときjavaコマンドはどうやってtopic22.AnimeClockクラスのクラスファイル `C:\pleiades\eclipse\JavaFX_topic\bin\topic18\AnimeClock.class` の場所を知ることができるでしょうか?カレントディレクトリーからの相対位置は `./bin/topic22/AnimeClock.class` になりますが、javaコマンドはbinディレクトリーの下にパッケージに応じたクラスファイルが配置されていることなんぞ知りません。Eclipseが勝手にそういうふうにしているだけであってjavaコマンドはそういうことを全然知らないのです。 それゆえjavaコマンドを起動する際には「クラスファイルをどこから探せばいいよ」ってことを教えてあげる必要があります。それを教えるためのオプションが`-cp`つまりクラスパスの指定オプションです。 `java -cp bin topic22.AnimeClock` あるいは `java -cp C:\pleiades\eclipse\JavaFX_topic\bin` と指定して動かせばjavaコマンドはめでたくクラスファイルを見つけることができるでしょう。 少々教条的な言い方になりますが・・・javaなりjavacなりのコマンドを使うならそれらコマンドにどのようなオプションがあるか調べておいてください。 個人的な意見ですが、以下のオプションは最低限知っておく方がよいと思います。これを知らないとごく典型的なものでもコンパイルや実行がうまくいかないと思います。 javac: * -cp * -d * -sourcepath * 文字セット関連(-J-Dfile.encoding=xxxや-encodingオプション) java: * -cp * 文字セット関連(-Dfile.encoding=xxxオプション) どこを見ればわかるかは経験に応じてまちまちになるかと思います。java --helpなどで出てくる簡単な説明を見ても親切な説明ではないのでチンプンカンプンかも知れません。やはりインターネット上で解説ページを探したり教科書を見るとかしたほうがよいと思います。しかしきちんとした仕様を調べることを忘れないでください。Oracleが提供している日本語のJava8関連のヘルプは以下のあたりから探せます。 (なお、上記はJava8までの話であり最新のJava言語にはモジュールの仕様が追加されているのでモジュール関連オプションも必須知識になると思います。)