SanTaku.java をアーカイブにしたSanTaku.jarはmondai.txtを見つけられなくて動かないことがあります。
mondai.txt を起動後に選択する SanTakuF.java と異なり、 SanTaku.java はカレントディレクトリ(フォルダ)にあるmondai.txtを読もうとします。
javaコマンドで実行する時はカレントディレクトリはSanTaku.javaのあるディレクトリなので同じ所にあるmondai.txtを読むことができます。しかし、jarファイルをダブルクリックする方法で起動したときは、カレントディレクトリはOSによって設定が異なります。
Linuxではユーザーホームがカレントディレクトリになるので、mondai.txtが見つからなくなります。(ユーザーホームにmondai.txtを置けば読み込んで3択問題が始まります)
Windowsではjarファイルの置かれたディレクトリがカレントディレクトリになるので、そのまま実行されます。
起動方法 | Linux(Gnome)の場合 | Windowsの場合 |
---|---|---|
javaコマンドで起動 | java実行ディレクトリ | java実行ディレクトリ |
jarファイルをダブルクリック | ユーザーホームディレクトリ | jarファイルの置かれたディレクトリ |
問題はSanTaku.javaではmondai.txtのファイル名だけを指定しているので、カレントディレクトリが変わってしまうと読めなくなってしまうことです。ではディレクトリ指定はできるのでしょうか。
mondai.txtのある場所をプログラムの中に書くとファイルをもらった人はファイルを決められたところに置かなくてはなりません。これは不便です。またOSにより場所の指定は異なります。LINUXでは / (ルート)から始まるパスで指定しますが、Windowsでは c:\ などとドライブ名から指定が始まります。
共通に使えるのがユーザーホームとプログラムファイルの置かれたディレクトリという指定です。
表からわかるようにWindowsの場合はユーザーホームディレクトリを指定する方法を調べなければなりませんが、そうしたとしてユーザーにはmondai.txtは必ず「ユーザーホームに置いてください」などの制約がかせられます。
LINUXの場合はプログラムファイルの置かれたディレクトリを指定する方法を調べなければなりません。これなら「プログラムとmondai.txtは同じフォルダに入れてください」だけで済みそうです。
使用状態を考えてみると、「プログラムとmondai.txtは同じフォルダに入れてください」でも制約なわけで、この約束を守らない場合は理由もなく起動しない(様に見える)ことになります。
どのようになっているのが便利でしょうか。