2017-08-17 6 views
0

Pourquoi est-ce que cela lance une exception MissingResourceException? Est-ce que je me trompe ou n'est-ce pas le point de ListResourceBundles est de fournir les ressources dans le code?Pourquoi j'obtiens MissingResourceException

public class Hello extends Thread { 

    public static void main(String[] args) { 

     ResourceBundle resBundle = ResourceBundle.getBundle("ResourceBundle", new Locale("it", "IT", "")); 
     System.out.println(resBundle.getObject(new Integer(1).toString())); 
    } 


} 

dans un fichier séparé:

public class ResourceBundle_it_IT extends ListResourceBundle { 

    public Object[][] getContents() { 
     return contents; 
    } 
    static final Object[][] contents = { 
     {"1", "Uno"}, 
     {"2", "Duo"}, 
     {"3", "Trie"},}; 

} 

Mon erreur:

run: 
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name ResourceBundle, locale it_IT 
    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 hello.Hello.main(Hello.java:21) 
/home/maxbisesi/.cache/netbeans/8.1/executor-snippets/run.xml:53: Java returned: 1 
BUILD FAILED (total time: 0 seconds) 

Répondre

3

Lorsque vous obtenez une erreur, et d'essayer de comprendre la raison, la première étape est toujours à lire la trace de la pile de l'erreur. Dans ce cas, la trace de la pile est

Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name ResourceBundle, locale it_IT 
    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 Hello.main(Hello.java:9) 
Caused by: java.lang.IllegalAccessException: Class java.util.ResourceBundle$Control can not access a member of class ResourceBundle_it_IT with modifiers "" 
    at sun.reflect.Reflection.ensureMemberAccess(Reflection.java:102) 
    at java.lang.Class.newInstance(Class.java:436) 
    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.getBundleImpl(ResourceBundle.java:1361) 
    ... 2 more 

Et si vous le lisez, le problème devient évident:

Class java.util.ResourceBundle$Control can not access a member of class ResourceBundle_it_IT with modifiers ""

Déplacez le ResourceBundle_it_IT de classe à son fichier onwn, où il appartient. rendre public comme le message d'erreur le suggère, et le problème disparaît.

+0

Bizarre, ce n'est pas l'erreur que je reçois – madmax

+0

J'ai déplacé le Bundle dans son propre fichier en tant que classe publique et toujours obtenir la même erreur? – madmax

+0

Quel est le package de la classe ResourceBundle_it_IT? –