# Reload ResourceBundle



## CK (12. Aug 2008)

Hi,
muss ein Resource Bundle zur Laufzeit neu laden.
Der Code:

```
props = ResourceBundle.getBundle("tmp");
                Class<?> props klass = props.getClass()
                        .getSuperclass();
                Field propsfield = propsklass
                        .getDeclaredField("cacheList");
                propsfield.setAccessible(true);
                sun.misc.SoftCache propscache = (sun.misc.SoftCache) propsfield
                        .get(null);
                propscache.clear();
                propsfield.setAccessible(false);
```
funktioniert unter Java 1.5 wunderbar, aber sobald ich auf 1.6 umstelle erhalte ich folgende Exception

```
java.lang.ClassCastException: java.util.concurrent.ConcurrentHashMap cannot be cast to sun.misc.SoftCache
```

Wie bekomme ich das hin das der Code unter beiden Java-Versionen läuft?


----------



## Wildcard (12. Aug 2008)

theoretisch mit einer instanceof Prüfung. Praktisch ist der Code jedoch Mist, weil du auf die Sun Packages nicht zugreifen darfst. Je nach OS, Java Version, Hersteller der JRE,... wird das funktionieren, oder auch nicht.


----------



## musiKk (12. Aug 2008)

Klassen aus dem sun.* Package sollte man nicht selbst verwenden. Zumindest habe ich das immer gelesen, weil sonst genau solche Dinge passieren, wie dir jetzt: Niemand garantiert, dass die bei Versionsspruengen gleich bleiben oder sich in einer bestimmten Weise veraendern.


----------



## CK (12. Aug 2008)

Und wie könnte ich das ResourceBundle sauber laden, oder gibts da nur die "Mist"-Variante?


----------



## Wildcard (12. Aug 2008)

As of Java 6:
http://java.sun.com/javase/6/docs/api/java/util/ResourceBundle.html#clearCache(java.lang.ClassLoader)


----------



## CK (12. Aug 2008)

Danke erstmal, aber das würde ja heisen das man erst sauberen Code ab 1.6 nutzen könnte und vorher fuschen muss.


----------



## Wildcard (12. Aug 2008)

Schau mal hier:
http://forums.sun.com/thread.jspa?messageID=10233921
Warum musst du eigentlich das Bundle neu laden?


----------

