目次

jarのカレントディレクトリ

SanTak.jarが動かない理由

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 が同じ場所になければならないという約束を守らない場合は理由もなく起動しない(様に見える)。

どのようになっているのが便利だろうか。

ファイルがないときにはそれを知らせる。
最小限だが解決の手がかりにはなる
ファイルがないときにはファイルを探して選択できるようにする。
より簡単に解決できる
はじめからファイルを選択するようにする
問題ファイルを複数にすることで用途が広がる
mondai.txtもjarファイルに入れてしまう。
最もすっきりするが別の問題に変えるためにソースからコンパイルしないとならない
もくじ

聖愛高等学校
http://www.seiai.ed.jp/
2009/10/6
2012/04/15