2017-03-23 1 views
1

現在、私はJava Desktop Applicationをビルドしています。ここで、ユーザーはJFileChooserを使用して言語を設定するためにfile.propertiesをロードできます。しかし、それは私に例外をスローします:基本名language.propertiesのロケールpt_BRのバンドルを見つけることができません。JFileChooserからfile.propertiesを取得し、ResourceBundleで使用する

私のファイル名はlanguage.propertiesですので、何が問題なのか分かりません。例えばlanguage_en.propertiesではなく、デフォルトのlanguage.propertiesファイルをロードしたいとします。ここに私のコードです:

JFileChooser fileChooser = new JFileChooser(); 
int returnValue = fileChooser.showOpenDialog(null); 
if (returnValue == JFileChooser.APPROVE_OPTION) { 
File selectedFile = fileChooser.getSelectedFile(); 
URL[] urls = null; 
try { 
urls= new URL[] 
{ 
selectedFile.toURI().toURL() 
}; 
} catch (MalformedURLException e){// TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
    String fileName = selectedFile.getName(); 
    int pos = fileName.lastIndexOf("."); 
    if (pos > 0) { 
     fileName = fileName.substring(0, pos); 
    } 
    ClassLoader loader = new URLClassLoader(urls); 
    ResourceBundle bundle = ResourceBundle.getBundle(fileName,Locale.getDefault(),loader); 
} 

私は助けていただければ幸いです。

+0

「ベース名** language.properties **のバンドルを見つけることができません」と具体的に言えば、ここに投稿したコードスニペットが正しくない: 'getBundle(" language.properties ")'スニペットと同じ 'getBundle(" language ")'を呼び出す必要があります。 –

+0

また、選択者がファイルまたはフォルダを選択するかどうかは不明です。また、選択したファイルの名前が "language.properties"でない場合はどうなりますか? –

+0

私は自分の質問を更新しました。 –

答えて

0

問題を修正しました。 URLの絶対パスを設定していましたが、パスのみを設定してください。ここで

は、右のコードです:

JFileChooser fileChooser = new JFileChooser(); 
    int returnValue = fileChooser.showOpenDialog(null); 


    if (returnValue == JFileChooser.APPROVE_OPTION) { 
     File selectedFile = fileChooser.getSelectedFile(); 

     int pos2 = selectedFile.getAbsolutePath().lastIndexOf(selectedFile.getName()); 
     String path = null; 
     path = selectedFile.getAbsolutePath().replace(selectedFile.getName(), ""); 
     File file = new File(path); 
     URL[] urls = null; 
     try { 
      urls=new URL[]{ 
        file.toURI().toURL() 
        };} 
     catch (MalformedURLException e){// TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 
     String fileName = selectedFile.getName(); 
     int pos = fileName.lastIndexOf("."); 
     if(pos > 0){ 
      fileName = fileName.substring(0,pos); 
     } 
     ClassLoader loader = new URLClassLoader(urls); 
     bundle = ResourceBundle.getBundle(fileName, Locale.getDefault(), loader); 
     } 

私はさらなる改善を行います。ありがとうございました。

関連する問題