mondai.txt を起動後に選択する SanTakF.java と異なり、 SanTak.java はカレントディレクトリ(フォルダ)にあるmondai.txtを読もうとする。
javaコマンドで実行する時はカレントディレクトリはSanTak.javaのあるディレクトリなので同じ所にあるmondai.txtを読むことができる。しかし、jarファイルをダブルクリックする方法で起動したときは、カレントディレクトリはOSによって設定が異なる。
Linuxではユーザーホームがカレントディレクトリになるので、mondai.txtが見つからない。(ユーザーホームにmondai.txtを置けば読み込んで3択問題が始まることでもわかる)
Windowsではjarファイルの置かれたディレクトリがカレントディレクトリになるので、そのまま実行される。
起動方法 | Linux(Gnome)の場合 | Windowsの場合 |
---|---|---|
javaコマンドで起動 | java実行ディレクトリ | java実行ディレクトリ |
jarファイルをダブルクリック | ユーザーホームディレクトリ | jarファイルの置かれたディレクトリ |
問題はSanTak.javaではmondai.txtのファイル名だけを指定しているので、カレントディレクトリが変わってしまうと読めなくなってしまうことである。ではディレクトリ指定はできるのか。
javaはOSが異なってもそのまま動かせるはずなのにカレントディレクトリの扱いによってうまく動かないこともある。SanTak.jar ではjarファイルを置く場所をユーザーホームにするか、mondai.txtをユーザーホームに置くか、どちらかをすればよいのだが、これでは不便だ。
「jarファイルと同じ場所に置く」のならば問題がなさそうなのだが、javaの場合自分自身がどこに置かれているのか(jarファイルの場所)を知るのは簡単ではない。
方法がないわけではないが…。
使用状態を考えてみると、「jarファイルと同じ場所」が分かったとしても、今度はjarファイルmondai.txt が同じ場所になければならないという約束を守らない場合は理由もなく起動しない(様に見える)。
どのようになっているのが便利だろうか。