質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

39340閲覧

javaのロケールのリソースバンドルについての質問です。

Chikin

総合スコア38

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2015/09/10 08:40

Javaでリソースバンドルの使い方の練習をしたいのですが、エラーの原因がどうしてもわかりません。
エラー発生場所は、メインの
ResourceBundle rb = ResourceBundle.getBundle("dai5syo.Resources", locale);
この行です。
"dai5syo.Resources"が見つからないというエラーのようなのですが、どこがおかしいのでしょうか?

lang

1package dai5syo; 2 3import java.util.ListResourceBundle; 4import java.util.Locale; 5import java.util.ResourceBundle; 6 7public class Practice4 { 8 9 static Locale defalt = Locale.getDefault(); 10 static Locale us = new Locale("en", "US"); 11 static Locale[] ary = { defalt, us }; 12 13 public static void main(String a[]) { 14 for (Locale locale : ary) { 15 System.out.println(locale.getLanguage() + " " + locale.getCountry()); 16 ResourceBundle rb = ResourceBundle.getBundle("dai5syo.Resources", locale); 17 System.out.println(rb.getString("send")); 18 System.out.println("===================="); 19 } 20 } 21} 22 23class Resources extends ListResourceBundle { 24 @Override 25 protected Object[][] getContents() { 26 Object[][] contents = { 27 { "send", "送信" }, 28 { "cancel", "取り消し" } 29 }; 30 return contents; 31 } 32} 33 34class Resources_en_US extends ListResourceBundle { 35 @Override 36 protected Object[][] getContents() { 37 Object[][] contents = { 38 { "send", "send" }, 39 { "cancel", "cancel" } 40 }; 41 return contents; 42 } 43} 44

コンソール画面には以下ような実行結果が表示されています。

ja JP
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name dai5syo.Resources, locale ja_JP
at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1564)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1387)
at java.util.ResourceBundle.getBundle(ResourceBundle.java:845)
at dai5syo.Practice4.main(Practice4.java:16)
Caused by: java.lang.IllegalAccessException: Class java.util.ResourceBundle$Control can not access a member of class dai5syo.Resources with modifiers ""
at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:101)
at java.lang.Class.newInstance(Class.java:427)
at java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:2645)
at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1501)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1465)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1419)
at java.util.ResourceBundle.findBundle(ResourceBundle.java:1419)
at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1361)
... 2 more

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

MissingResourceException とありますように。
キー指定の"dai5syo.Resources"の対象リソースが見つかっていません。
おそらく原因は、

  1. リソースファイルが読み込めていない(掲載ソースには実装されていません)
  2. ResourcesクラスとResources_en_USクラスは参照されていない

のだと思います。

投稿2015/09/10 09:18

CharmSystems

総合スコア241

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chikin

2015/09/10 09:29

どうもありがとうございます。 ご指摘の通りクラスを1つのファイルにまとめていたためリソースファイルが読み込めてなかったみたいです。
guest

0

ベストアンサー

参考ページ

ResourceBundleはそのクラスが存在するパスにある.propertiesファイルを参照するもので,クラス名を探すものではありません.なので該当する.propertiesファイルが存在しないために例外が発生していると思われます.

投稿2015/09/10 09:17

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chikin

2015/09/10 09:27

ご指摘ありがとうございます。 リソースバンドルクラスを別のファイルにしてみたところエラーが消えました。 いちいち国ごとにファイルを用意しないといけないのはめんどくさいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問