Fのぼやき

日々の生活、プログラミング、映画なんかをぼやく!!

クラスローダー

2005-10-26 21:04:23 | 日記
先日Quicktime for Java 7.0が出てないみたいな話をしたが、実は出てました。すいません。標準で付属するようになったためインストール時に指定する必要がなくなっただけでした。

せっかくでたてたということなのでアップデートして、試してみた・・・、が動かない。
とりあえず色々四苦八苦して試してみたら以下のようなことがわかってきた。
  • 前バージョンではWINDOWSSYSYTEM32にぶちこまれていたDLLが7.0ではProgram Filesの下におかれている(そのためライブラリパスの指定が必要)。
  • eclipse上で実行した際、次の場合はClassLoaderがライブラリを発見できない。
    1. JVMのパラメータでライブラリパスを与えた場合(-Djava.library.path = "...")
    2. b. 環境変数のPATHにライブラリパスを設定した場合
    3. カレントディレクトリにDLLをぶち込んだとき

逆に次の場合は上手くいく
  • jreのbinディレクトリにDLLをぶち込んだとき
  • コマンドラインから実行したときはa~dの全ての場合で上手くいく。

現状でわかったのはこれだけ。とりあえず解決策としてはコマンドラインから実行すればよいが、なぜeclipse上での実行時にはクラスローダーの挙動がおかしいのかがよくわからない。
原因としては
  • eclipse上での実行時になにか特別なパラメータが与えられている
  • eclipse上ではClassLoaderの挙動がコマンドラインの場合と違う

なんかが考えられる。
どうやらeclipseの仕組みを知らないとわからないわけだ。
どなたかeclipseに詳しい人がいたら教えてください。

追伸
家で同じことを試したらeclipse上でも問題なく動きましたorz。
どうやら学校の環境設定になんらかの問題があるらしい。

追伸2
原因判明、環境変数で指定したクラスパスが古いjarファイルを指していたこと。確か古いバージョンではjre/lib/extの下にjarをおいて環境変数で指定することになっていたのだ。eclipseではどうやら明示的に指定したライブラリより先に、環境変数クラスパスで指定されたライブラリを読み込むらしい。こんなくだらない理由で7時間・・・。

トラブル解決法

2005-10-26 20:49:16 | 日記
長年PCとつきあってくると、トラブルが起きた場合自分で処理可能な範囲内か範囲外かということがうすうすわかってくる。

処理可能な場合は10分くらい格闘すれば解決するが、そうじゃない場合はかるく一日コースに突入する。始めのころは一日コースを延々と繰り返していたが、最近はダメなものは根本的にあきらめて人に聞くなり、違う方法を考えるようにしている。

世の中には同じようなPCのトラブルを起こしている人が意外に多い。その人たちの説明にしたがって、問題解決にあたると結構な割合で解決する(処理可能な範囲のトラブル)。やっかいなのは同じように見えて、実は別のトラブルであった場合。やたら情報が多くていろいろ試すが、結局上手くいかない。それどころかその解決法を確かめるために、他の処理を行わないといけない。そもそもトラブルの原因が違うのだからどんなに頑張っても問題が解決しない。もうそうなったら自力での解決はあきらめた方がいい。

なぜこんな話をしているかというと、今日久しぶりにトラブルにぶち当たったから。いつもなら、さっさとあきらめるが、今日は朝からどうも調子がでない。そんな時は何をやってもはかどらないから、久しぶりにトラブルと戯れてみようと思ったわけだ。


結局2時から初めて今9時。7時間が消えましたw