I am writing an application (in particular, a plugin for the Bukkit Minecraft server). This requires access to the .properties file from the application JAR. Here I ran into some strange problem. When I test the program on my development computer, it works just fine. The .properties file loads, and everything is fine. However, on another computer on which I am testing it, I am trying to run the application and it cannot load properties, and InputStream is null . Here is the file upload method:
public class Points { private HashMap<String, MessageFormat> messages; public Points() { buildMessages(); } public static void buildMessages() { Properties messageProps = new Properties(); InputStream in = Points.class.getResourceAsStream("resources/messages.properties"); messages = new HashMap<String, MessageFormat>(); Enumeration en; try { messageProps.load(in); } catch(IOException ex) { System.err.println("Couldn't read message properties file!"); return; } catch(NullPointerException ex) { System.err.println("Couldn't read message properties file!"); if(in == null) System.out.println("IOStream null"); return; } en = messageProps.propertyNames(); while(en.hasMoreElements()) { String key = (String)en.nextElement(); String prop = messageProps.getProperty(key); MessageFormat form = new MessageFormat(prop.replaceAll("&", "\u00a7").replaceAll("`", "")); messages.put(key, form); } } }
I have omitted some irrelevant code, but this is its essence. The structure of the JAR is as follows:
com/ pvminecraft/ points/ Points.java <-- The class where the file is loaded resources/ messages.properties <-- The file being loaded
On my PC, the file is downloaded from resources/messages.properties , but in another InputStream file is null, and my catch for NullPointerException fired. What could be causing the problem, and how can I fix it? Thanks.
Update: Even using the full path ( /com/pvminecraft/points/resources/messages.properties ), the same problem still persists.
Update 2: Here is the full stack trace:
java.lang.NullPointerException at java.util.Properties$LineReader.readLine(Properties.java:435) at java.util.Properties.load0(Properties.java:354) at java.util.Properties.load(Properties.java:342) at com.pvminecraft.points.Points.buildMessages(Unknown Source) at com.pvminecraft.points.Points.onEnable(Unknown Source) at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:188) at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:968) at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:280) at org.bukkit.craftbukkit.CraftServer.loadPlugin(CraftServer.java:186) at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:169) at org.bukkit.craftbukkit.CraftServer.reload(CraftServer.java:436) at org.bukkit.Bukkit.reload(Bukkit.java:187) at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:22) at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:165) at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:378) at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:374) at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:564) at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:541) at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:425) at net.minecraft.server.ThreadServerApplication.run(SourceFile:457)
All elements of org.bukkit and org.craftbukkit are the server. The .properties file is loaded into the buildMessages method, called by the onEnable Points method.
Update 3: On a new installation of Arch Linux, the message properties file loads correctly, and everything is fine. The remote server is Ubuntu Linux, and my dev computer is Arch.
Update 4: Ok, this is a kind of permission. This seems to be a localized issue. I say this because I managed to access two more computers, and the program works correctly on both. Although this is annoying, it doesn't seem like something is wrong with my code or assembly scripts. I still want to know what happened, but he no longer insists. I will continue to study this. Thanks to everyone.