- PR -

ResourceBundle -> MissingResourceException

投稿者投稿内容
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2003-10-24 12:40
現象は簡単なのですが、解決方法に行き詰まってしまいましたので、
お知恵をお貸し下さい。

Windows XP Home / J2SDK 1.4.2_02 / ja_JP(デフォルト)
の環境にて、
コード:
  String filename = "hogehoge";
  File f = new File("lib/" + filename + ".properties");
  System.out.println(String.valueOf(f.exists()));

  try{

    private ResourceBundle prop = ResourceBundle.getBundle("lib/" + filename);

  }catch(MissingResourceException mre){
 
    System.out.println(mre.getClassName());
    System.out.println(mre.getKey());
    throw mre;

  }



実行結果
コード:
true
lib/hogehoge_ja_JP

java.util.MissingResourceException: Can't find bundle for base name lib/hogehoge, locale ja_JP
        at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
        at java.util.ResourceBundle.getBundleImpl(Unknown Source)
        at java.util.ResourceBundle.getBundle(Unknown Source)



現象は「参照先ファイルが見つからない」に尽きるのですが、
参照先を絶対パスにしても、ファイル名をhogehoge_ja_JP等に変更しても
ダメでした。

実行クラスは環境上で唯一であり、「実は同名の別クラスを起動していた」ことは
ないと確認しています。

カレントディレクトリは起動バッチと同じです。


他に環境設定等で確認すべき事項がありましたら、ご教示頂けないでしょうか。
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2003-10-24 12:48
>private ResourceBundle prop = ResourceBundle.getBundle("lib/" + filename);

private ResourceBundle prop = ResourceBundle.getBundle("lib." + filename);
にするとどうですかね・・・
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2003-10-24 14:10
早速のご返答、ありがとうございます。

ご教示頂いた通りに試してみましたが、以下のように
同じ結果となってしまいました。
その後、同じようなロジックで正常に動作していたものを
この環境で動かしてみたところ、全く同じエラーが
発生しましたので、ロジックではない他(環境?)の問題では
ないかと考えています。

J2SDK のバージョンを下げることも試してみたほうがよいでしょうか?
なるべく現在の環境を壊したくないのですが。


コード:
true
lib.hogehoge_ja_JP

java.util.MissingResourceException: Can't find bundle for base name lib.hogehoge,
 locale ja_JP
        at java.util.ResourceBundle.throwMissingResourceException(Unknown Source)
        at java.util.ResourceBundle.getBundleImpl(Unknown Source)
        at java.util.ResourceBundle.getBundle(Unknown Source)

とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-10-24 14:32
こんにちは。

クラスパスに関する情報が記述されていないのですが、

c:\tmp\lib\hogehoge.properties
という場合

もちろん、c:\tmpにクラスパスは通っているのですよね?
※でも、絶対パスで指定するとか言ってるから
 かなり怪しかったりして(笑)。

[追記]
上記の例では、
ResourceBundle prop = ResourceBundle.getBundle("lib.hogehoge");
としてリソースバンドルを取得することを前提にしています。


[ メッセージ編集済み 編集者: とまと 編集日時 2003-10-24 14:58 ]
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2003-10-24 14:59
当然、クラスパスは通っています。
(意味なく絶対パスを指定してみるほど、ネタに困っているということです。
 ちなみに、propertiesファイルを様々なlibフォルダに入れてみたりもしました。)

Windows環境変数、起動バッチで設定しているクラスパス、起動しているjava.exe
Locale等、周りの人間も巻き込んで考えられる限り調べているのですが。。。
とまと
ベテラン
会議室デビュー日: 2003/10/18
投稿数: 51
投稿日時: 2003-10-24 15:03
引用:

Samiadonさんの書き込み (2003-10-24 14:59) より:
当然、クラスパスは通っています。
(意味なく絶対パスを指定してみるほど、ネタに困っているということです。
 ちなみに、propertiesファイルを様々なlibフォルダに入れてみたりもしました。)


これは様々libフォルダにいれて、
プログラムを起動するときに
そのたびに

java -classpath .;(libフォルダの親フォルダ) mypackage.foo

と指定したけどうまくいかなかったということですよね。

私の環境はWindows XP Professional, JSDK1.4.2, ja_JPですが、
問題なくリソースファイルを参照できています。
NYRL
ベテラン
会議室デビュー日: 2003/07/14
投稿数: 90
投稿日時: 2003-10-24 15:11
ちょっとクラスパスとgetBundleについて確認というかまとめると

・getBundle は クラスパスから検索に行きます
・プログラムにnamespaceがついている場合は
大抵ルート部分にしかクラスパスが通っていないので
namespace付きで指定する必要があります。

例えば

全然関係ないパスのlibに入れた場合は
・classpathにlibの親フォルダを指定し"lib." + filename
・classpathにlibのフォルダを指定しfilename

プログラムの配下にlibフォルダがある場合は
・namespaceあり
 ・classpathにlibの親フォルダを指定し"namespace.lib." + filename
 ・classpathにlibのフォルダを指定しfilename

・namespaceなしは
 ・classpathにプログラムのフォルダを指定し"lib." + filename
 ・classpathにlibのフォルダを指定しfilename

という風になります。
Samiadon
会議室デビュー日: 2003/10/08
投稿数: 16
お住まい・勤務地: 東京都神戸市浪速区猿猴橋町三条下ル
投稿日時: 2003-10-24 15:26
たくさんのご返答、本当にありがとうございました。

現象が単純だけに、結果もやっぱりアホな結果に終わりました。

ご返答の中で、バージョンによる差異ということではないという
ことを教えていただきましたので、
バッチと環境変数を最初から調査し直しました。

すると、ネットワークドライブを指定している箇所があり、
案の定、それを外すと上手く行きました。

もう恥しいやら自分に腹が立つやら・・・


お騒がせしました。
何とか明日の休日出勤だけは免れたようです。

本当にありがとうございました。


スキルアップ/キャリアアップ(JOB@IT)