Null pointer exception for unknown reason

Discussion in 'Plugin Development' started by salim_aliya, Oct 21, 2012.

Thread Status:
Not open for further replies.
  1. Offline

    salim_aliya

    Hi!

    i am writing a plugin in order to be able to control, who is logging in and which permissions this user has.

    For this, i am using HashMaps, which are declared and initialized in the Main class. For some reason, bukkit throws up a null pointer exception in case i am accessing it from another class and i dont know why. I have tried out several ideas of solving this but nothing worked.

    Who can tell me, what i am doing wrong?

    Main class:
    Code:
    public class Main extends JavaPlugin
    {
    public final BlockListener BlockListener = new BlockListener();
    public final EntityListener EntityListener = new EntityListener();
    public final PlayerListener PlayerListener = new PlayerListener();
     
    public HashMap<String, Integer> ChatPermission = new HashMap<String, Integer>();
    public HashMap<String, Integer> PlayPermission = new HashMap<String, Integer>();
    public HashMap<String, String> PasswordHash = new HashMap<String, String>();
     
    public void onDisable()
    {
    ChatPermission.clear();
    PlayPermission.clear();
    PasswordHash.clear();
     
    System.out.println(this + " is now disabled!");
    }
     
    public void onEnable()
    {
    ChatPermission.clear();
    PlayPermission.clear();
    PasswordHash.clear();
     
    PluginManager PluginManager = getServer().getPluginManager();
     
    PluginManager.registerEvents(BlockListener, this);
    PluginManager.registerEvents(EntityListener, this);
    PluginManager.registerEvents(PlayerListener, this);
     
    System.out.println(this + " is now enabled!");
    }
    }
    
    PlayerListener class (outtake):

    Code:
    public class PlayerListener implements Listener
    {
    private Main main;
     
    private MySQL mysql;
     
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerJoin(PlayerJoinEvent event)
    {
    Player player = event.getPlayer();
    String name = player.getName();
     
    main.ChatPermission.put(name, 0);
    main.PlayPermission.put(name, 0);
    }
    
    Bukkit Error Text:
    Code:
    16:51:21 [SEVERE] Could not pass event PlayerJoinEvent to Instant Login Manager v0.1
    org.bukkit.event.EventException
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:341)
    at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62)
    at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:477)
    at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:462)
    at net.minecraft.server.ServerConfigurationManagerAbstract.c(ServerConfigurationManagerAbstract.java:161)
    at net.minecraft.server.ServerConfigurationManagerAbstract.a(ServerConfigurationManagerAbstract.java:92)
    at net.minecraft.server.NetLoginHandler.d(NetLoginHandler.java:129)
    at net.minecraft.server.NetLoginHandler.c(NetLoginHandler.java:42)
    at net.minecraft.server.DedicatedServerConnectionThread.a(DedicatedServerConnectionThread.java:44)
    at net.minecraft.server.DedicatedServerConnection.b(SourceFile:29)
    at net.minecraft.server.MinecraftServer.q(MinecraftServer.java:561)
    at net.minecraft.server.DedicatedServer.q(DedicatedServer.java:213)
    at net.minecraft.server.MinecraftServer.p(MinecraftServer.java:474)
    at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:406)
    at net.minecraft.server.ThreadServerApplication.run(SourceFile:539)
    Caused by: java.lang.NullPointerException
    at ik.bukkit.ilm.PlayerListener.onPlayerJoin(PlayerListener.java:30)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:339)
    ... 14 more
    
    Thank you for any hint!!
     
  2. Offline

    Infamous Jeezy

    salim_aliya
    Have you tried referencing your main class?
    Like this...
    Code:java
    1.  
    2. Main plugin;
    3. PlayerListener(Main p)
    4. {
    5. plugin = p;
    6. }
    7.  

    Make sure Main is the name of the class you are referencing.
    That would go inside your PlayerListener class after:
    private MySQL mysql;
    I also believe you should remove this line..
    private Main Main main;

    So when you use the hashmap from your main class use:
    plugin.hashMap.get(key,value);




    Hopefully you understand this.
     
  3. Offline

    salim_aliya

    Unfortunately didn't work.

    I tried referencing it but it made everything more complicated.

    The null pointer exception occurs in the PlayerListener class right after "main.ChatPermission.put(name, 0);" is called.

    Why is this command throwing up a null pointer exception?
     
  4. Offline

    Infamous Jeezy

    Are you getting the same error?
    Post your main class and the listener class with the referencing added.
     
  5. Offline

    maxp0wer789

    As stated by Infamous Jeezy your reference to your Main class is null cause you never hand over any reference to your listener

    this is how your PlayerListener should look like.
    Code:
    public class PlayerListener implements Listener
    {
    private Main main;
     
    private MySQL mysql;
     
    public PlayerListener(Main _main) {
    main = _main;
    }
     
    @EventHandler(priority = EventPriority.HIGHEST)
    public void onPlayerJoin(PlayerJoinEvent event)
    {
    Player player = event.getPlayer();
    String name = player.getName();
     
    main.ChatPermission.put(name, 0);
    main.PlayPermission.put(name, 0);
    }
    now you initialize your listener like this in your Main class

    Code:
    public final PlayerListener PlayerListener = new PlayerListener(this);
     
  6. Offline

    salim_aliya

    As maxp0wer789, i exactly wrote the same code, but still throws out same error on any event, where one of the HashMaps are used.

    EDIT: OK it now worked. It just needed to be cleaned up and rebuilt after.

    Thank you!!
     
Thread Status:
Not open for further replies.

Share This Page