Search code examples
javapropertiesclasscastexceptionresourcebundle

Java sun.uil.ResourceBundleEnumeration cannot be cast to java.lang.String


I am creating a Bukkit plugin, but I have problems loading a .properties file. I am getting "sun.util.ResourceBundleEnumeration cannot be cast to java.lang.String"

I am trying to add all keys that arent in 2 .properties files (ENf and LANGf) from another properties file.

    File tempFile = null;
    try {
        tempFile = File.createTempFile("temp_EN", ".properties");
    } catch (IOException e) {
        e.printStackTrace();
    }
    try (FileOutputStream out = new FileOutputStream(tempFile)) {
        tempFile.deleteOnExit();
        copy(r.getUC().getResource("Messages/EN.properties"), out);
    } catch (IOException e) {
        e.printStackTrace();
    }
    ResourceBundle tempR = null;
    try {
        tempR = new PropertyResourceBundle(new FileInputStream(tempFile));
    } catch (IOException e) {
        e.printStackTrace();
    }
    Enumeration<String> keys = tempR.getKeys();
    //EN
    Properties propsEN = new Properties();
    Properties propsCU = new Properties();
    try {
        propsEN.load(new FileInputStream(ENf));
        propsCU.load(new FileInputStream(LANGf));
    } catch (IOException e) {
        e.printStackTrace();
    }

    while(keys.hasMoreElements()){
        String key = keys.nextElement();
        //
        if(!r.en.containsKey(key)){
            propsEN.put(keys, tempR.getString(key));
        }
        if(!r.cu.containsKey(key)){
            propsCU.put(keys, tempR.getString(key));
        }
    }
    try {
        FileOutputStream ENo = StreamUtil.createOutputStream(ENf);
        FileOutputStream CUo = StreamUtil.createOutputStream(LANGf);
        propsEN.store(ENo, "");
        propsCU.store(CUo, "");
        ENo.close();
        CUo.close();
    } catch (SecurityException | IOException e) {
        e.printStackTrace();
    }

    tempFile.delete();

LANGf = Some .properties file

ENf = Some .properties file

r.getUC().getResource() returns a InputStream of a certain .properties file, where I am trying to copy all missing keys from.

copy(File, File) just copies a file.

java.lang.ClassCastException: sun.util.ResourceBundleEnumeration cannot be cast to java.lang.String at java.util.Properties.store0(Unknown Source) ~[?:1.7.0_21] at java.util.Properties.store(Unknown Source) ~[?:1.7.0_21] at Bammerbom.UltimateCore.UltimateFileLoader.addConfig(UltimateFileLoader.java:209) ~[?:?] at Bammerbom.UltimateCore.UltimateCore.onEnable(UltimateCore.java:22) ~[?:?] at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) ~[Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:324) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:404) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.craftbukkit.v1_7_R4.CraftServer.loadPlugin(CraftServer.java:455) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.craftbukkit.v1_7_R4.CraftServer.enablePlugins(CraftServer.java:389) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.craftbukkit.v1_7_R4.CraftServer.reload(CraftServer.java:839) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.Bukkit.reload(Bukkit.java:303) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:23) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:180) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:740) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchServerCommand(CraftServer.java:726) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at net.minecraft.server.v1_7_R4.DedicatedServer.aB(DedicatedServer.java:294) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at net.minecraft.server.v1_7_R4.DedicatedServer.v(DedicatedServer.java:259) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at net.minecraft.server.v1_7_R4.MinecraftServer.u(MinecraftServer.java:558) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at net.minecraft.server.v1_7_R4.MinecraftServer.run(MinecraftServer.java:469) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks] at net.minecraft.server.v1_7_R4.ThreadServerApplication.run(SourceFile:628) [Server.jar:git-Bukkit-1.7.9-R0.2-20-g0b2ed13-b3108jnks]


Solution

  • Instead of storing a value for each key in your properties, you store a value for the key enumeration.

    propsEN.put(keys, tempR.getString(key));
    

    should be

    propsEN.put(key, tempR.getString(key));
                   ^-- no 's' here.
    

    Same for propsCU, obviously.