java.lang.NullPointerException - Probably a stupid error...

Discussion in 'Plugin Development' started by Linkupdated, Mar 12, 2011.

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

    Linkupdated

    Hi Guys, im currently starting at making bukkit plugin so i just want to make a simple plugin but now all i have is this annoying error:

    Code:
    2011-03-12 12:26:29 [SEVERE] Could not load plugins/Citywars.jar in plugins: null
    org.bukkit.plugin.InvalidPluginException
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:85)
        at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:129)
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:94)
        at org.bukkit.craftbukkit.CraftServer.loadPlugins(CraftServer.java:55)
        at org.bukkit.craftbukkit.CraftServer.reload(CraftServer.java:195)
        at org.bukkit.command.SimpleCommandMap$ReloadCommand.execute(SimpleCommandMap.java:189)
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:77)
        at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:173)
        at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:362)
        at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:347)
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:253)
        at net.minecraft.server.ThreadServerApplication.run(SourceFile:366)
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
        at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:80)
        ... 11 more
    Caused by: java.lang.NullPointerException
        at me.linkupdated.citywars.CitywarsBlockListener.<init>(CitywarsBlockListener.java:19)
        at me.linkupdated.citywars.Citywars.<init>(Citywars.java:18)
        ... 16 more

    So if anyone could help me, it would be very apreciated.
    Thanks
     
  2. Offline

    Raphfrk

    Well, hard to do with so little info.

    You have a null pointer exception at line 19 of your file: CitywarsBlockListener.java.

    I would suggest looking at that line and seeing if all variables are correctly initialised.
     
  3. Offline

    Linkupdated

    ok, i think i found my problem :

    Code:
        public Connection connect() {
            try {
                Class.forName("com.mysql.jdbc.Driver");
    
                String url = "jdbc:mysql://localhost:3306/*****";
                String user = "*****";
                String passwd = "*****";
    
                Connection conn = DriverManager.getConnection(url, user, passwd);
                System.out.println("CITYWARS MYSQL CONNECTED-------------------------");
                return conn;
            } catch (Exception e) {
                System.out.println("CITYWARS MYSQL ERROR : " + e);
            }
            return null;
        }
    when i call this function to connect to my bdd it crash, i call it in my BlockListener class

    Code:
        public static Citywars plugin;
        Connection conn = plugin.connect();
    So it seem im calling it wrong, im new to mysql in java, pretty much used to php anyone could help?
    thanks!
    [MERGETIME="1299971641"][/MERGETIME]
    now it seemed to be fixed but each block destroyed i have this error :

    Code:
    2011-03-12 17:39:38 [SEVERE] Could not pass event BLOCK_BREAK to Citywars
    java.lang.NullPointerException
            at me.linkupdated.citywars.CitywarsBlockListener.onBlockBreak(CitywarsBlockListener.java:41)
            at org.bukkit.plugin.java.JavaPluginLoader$31.execute(JavaPluginLoader.java:282)
            at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:59)
            at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:225)
            at net.minecraft.server.ItemInWorldManager.d(ItemInWorldManager.java:112)
            at net.minecraft.server.ItemInWorldManager.a(ItemInWorldManager.java:42)
            at net.minecraft.server.EntityPlayer.f_(EntityPlayer.java:72)
            at net.minecraft.server.World.a(World.java:1011)
            at net.minecraft.server.WorldServer.a(WorldServer.java:53)
            at net.minecraft.server.World.f(World.java:993)
            at net.minecraft.server.World.d(World.java:970)
            at net.minecraft.server.MinecraftServer.h(MinecraftServer.java:335)
            at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:253)
            at net.minecraft.server.ThreadServerApplication.run(
     
  4. Offline

    Edward Hand

    Could you post your CitywarsBlockListener code?
     
  5. Offline

    Linkupdated

    here it is :

    Code:
    package me.linkupdated.citywars;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.Date;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    
    import org.bukkit.block.Block;
    import org.bukkit.entity.Player;
    import org.bukkit.event.block.BlockBreakEvent;
    import org.bukkit.event.block.BlockListener;
    
    public class CitywarsBlockListener extends BlockListener {
    
        public static Citywars plugin;
        Connection conn = this.connect();
        PreparedStatement stmt = null;
    
        public CitywarsBlockListener(Citywars instance) {
            plugin = instance;
        }
    
        public void onBlockBreak(BlockBreakEvent event) {
            Block block = event.getBlock();
            Player player = event.getPlayer();
            boolean PlayerFound = false;
            DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
            /*
             * if(block.getType() == Material.TORCH && plugin.enabled(player)){
             * player.sendMessage(ChatColor.RED + "You Broke a torch ;)");
             * System.out.println(player.getDisplayName() + " Broke a torch!"); }
             * else if(block.getType() == Material.TORCH){
             * System.out.println(player.getDisplayName() + " Broke a torch! && " +
             * plugin.enabled(player)); }
             */
            try {
                ResultSet rs = stmt.executeQuery("SELECT * FROM citywars_plugin");
    
                while (rs.next()) {
                    String PlayerName = rs.getString("citywars_plugin_player_name");
                    if (PlayerName == player.getDisplayName()) {
                        PlayerFound = true;
                        try {
                            stmt.executeUpdate("UPDATE citywars_plugin SET citywars_plugin_block_broke='"+ block.getType() +"', citywars_plugin_time='"+ format.format(new Date()) +"' WHERE citywars_plugin_player_name='"+ player.getDisplayName() +"'");
                        } catch (SQLException e) {
                            System.out.println("CITYWARS MYSQL ERROR : " + e);
                        }
                    }
                }
                if(PlayerFound == false){
                    try {
                        stmt.executeUpdate("INSERT INTO citywars_plugin(citywars_plugin_player_name, citywars_plugin_time, citywars_plugin_block_broke) VALUE('"+ player.getDisplayName() +"', '"+ format.format(new Date()) +"', '"+ block.getType() +"')");
                    } catch (SQLException e) {
                        System.out.println("CITYWARS MYSQL ERROR : " + e);
                    }
                }
    
            } catch (SQLException e) {
                System.out.println("CITYWARS MYSQL ERROR : " + e);
            }
        }
    
        public Connection connect() {
            try {
                Class.forName("com.mysql.jdbc.Driver");
    
                String url = "jdbc:mysql://localhost:3306/*****";
                String user = "******";
                String passwd = "*******";
    
                Connection conn = DriverManager.getConnection(url, user, passwd);
                System.out.println("CITYWARS MYSQL CONNECTED-------------------------");
                return conn;
            } catch (Exception e) {
                System.out.println("CITYWARS MYSQL ERROR : " + e);
            }
            return null;
        }
    }
    
    and ill post my main class :

    Code:
    package me.linkupdated.citywars;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.util.ArrayList;
    import java.util.HashMap;
    
    import org.bukkit.block.Block;
    import org.bukkit.command.Command;
    import org.bukkit.command.CommandSender;
    import org.bukkit.entity.Player;
    import org.bukkit.event.Event;
    import org.bukkit.plugin.PluginManager;
    import org.bukkit.plugin.java.JavaPlugin;
    
    public class Citywars extends JavaPlugin {
    
        private final CitywarsBlockListener blockListener = new CitywarsBlockListener(this);
        public final HashMap<Player, ArrayList<Block>> citywarsUsers = new HashMap<Player, ArrayList<Block>>();
    
        /*
         * try { state = conn.createStatement();state.execute(
         * "UPDATE accounts SET accounts_online='Online' WHERE accounts_id='"
         * +User_Id+"'"); } catch (SQLException e) { e.printStackTrace(); }
         */
    
        public void onEnable() {
            PluginManager pm = getServer().getPluginManager();
            pm.registerEvent(Event.Type.BLOCK_BREAK, blockListener, Event.Priority.Normal, this);
            System.out.println("Citywars Started ----------------------------------------------");
        }
    
        public void onDisable() {
            System.out.println("Citywars Stopped -----------------------------------------------");
        }
    
        /*public boolean onCommand(CommandSender sender, Command cmd,
                String commandLabel, String[] args) {
            if (commandLabel.equalsIgnoreCase("Citywars")) {
                toggleCitywars((Player) sender);
                return true;
            }
            return false;
        }
    
        public void toggleCitywars(Player player) {
            if (enabled(player)) {
                this.citywarsUsers.remove(player);
                player.sendMessage("Citywars Disabled");
            } else {
                this.citywarsUsers.put(player, null);
                player.sendMessage("Citywars Enabled");
            }
        }
    
        public boolean enabled(Player player) {
            return this.citywarsUsers.containsKey(player);
        }*/
    
    }
    
    Hlaf of it is commented out, i suspect im really not good with bdd handling so i may need help about that if anyone could help me it would be greatly appreciated!

    Thanks all.
     
  6. Offline

    Crash

    Well it shouldn't be hard to fix :
    PreparedStatement stmt = null;

    You set it to null and never change it anywhere so it crashes when you call stmt.executeQuery
     
  7. Offline

    Linkupdated

    Hi again, And thank you crash i change the way i call my bdd connection and it worked, but now i have this whole other problem :

    Code:
    while (rs.next()) {
                    String PlayerNameDb = rs.getString("citywars_plugin_player_name");
                    String PlayerName = player.getDisplayName();
                    if (PlayerNameDb == PlayerName) {
                        PlayerFound = true;
                        try {
                            stmt.executeUpdate("UPDATE citywars_plugin SET citywars_plugin_block_broke='"+ block.getType() +"', citywars_plugin_time='"+ format.format(new Date()) +"' WHERE citywars_plugin_player_name='"+ player.getDisplayName() +"'");
                        } catch (SQLException e) {
                            System.out.println("CITYWARS MYSQL ERROR : " + e);
                        }
                    }
                }
    i can't succeed to make : if (PlayerNameDb == PlayerName) { } The two vars are the same text but they wont pass as equals, i tought it was a var type error but now i put both to string any ideas?
    [MERGETIME="1300201955"][/MERGETIME]
    Or i will use regex as a final solution loll...
     
  8. Offline

    Edward Hand

    The '==' operator doesn't work for string comparison in java (although it does in some languages). You must use if(string1.equals(string2))
     
  9. Offline

    Linkupdated

    ohh i seee, thank you so much i didnt now, im kinda new to java. But in php im an advanced used lol...
     
Thread Status:
Not open for further replies.

Share This Page