NULL pointer that I can't figure out

Discussion in 'Plugin Development' started by kmccmk9, Jun 27, 2013.

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

    kmccmk9

    Hello, so I have a player listener class which works fine until line 20 where I get a null error. I know why it is null as there is nothing in the database it is querying. However, I though I captured that with the following if else statements. What's going on? Below is my main class, listener and error.

    Listener:
    Code:java
    1. package com.kmccmk9.HDSkinner;
    2.  
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5.  
    6. import org.bukkit.entity.Player;
    7. import org.bukkit.event.EventHandler;
    8. import org.bukkit.event.Listener;
    9. import org.bukkit.event.player.PlayerJoinEvent;
    10. import org.getspout.spoutapi.SpoutManager;
    11. import org.getspout.spoutapi.player.SpoutPlayer;
    12.  
    13. public class playerListener implements Listener {
    14. @EventHandler public void onPlayerJoin(PlayerJoinEvent event) {
    15. Player player = event.getPlayer();
    16. SpoutPlayer splayer = SpoutManager.getPlayer(player);
    17. String playername = "\"" + player.getDisplayName() + "\"";
    18. HDSkinner plugin = new HDSkinner();
    19. try {
    20. ResultSet results = plugin.sql.query("SELECT skin FROM userdata WHERE user=" + playername);
    21. if (!results.isBeforeFirst() ) {
    22. //No result
    23. }
    24. else {
    25. String skin = results.toString();
    26. splayer.setSkin(skin);
    27. }
    28. results = plugin.sql.query("SELECT cape FROM userdata WHERE user=" + playername);
    29. if (!results.isBeforeFirst() ) {
    30.  
    31. }
    32. else {
    33. String cape = results.toString();
    34. splayer.setCape(cape);
    35. }
    36. } catch (SQLException e) {
    37. // TODO Auto-generated catch block
    38. e.printStackTrace();
    39. }
    40. }
    41.  
    42. }
    43.  


    Main:
    Code:java
    1. package com.kmccmk9.HDSkinner;
    2.  
    3. import java.sql.ResultSet;
    4. import java.sql.SQLException;
    5. import java.util.logging.Logger;
    6.  
    7. import lib.PatPeter.SQLibrary.Database;
    8.  
    9. import org.bukkit.Bukkit;
    10. import org.bukkit.ChatColor;
    11. import org.bukkit.Server;
    12. import org.bukkit.command.Command;
    13. import org.bukkit.command.CommandSender;
    14. import org.bukkit.entity.Player;
    15. import org.bukkit.plugin.java.JavaPlugin;
    16. import org.getspout.spoutapi.SpoutManager;
    17. import org.getspout.spoutapi.player.SpoutPlayer;
    18.  
    19. import lib.PatPeter.SQLibrary.*;
    20. import lib.PatPeter.SQLibrary.Builders.MySQL.Table;
    21.  
    22. public class HDSkinner extends JavaPlugin {
    23. //Variables
    24. Server server;
    25. Database sql;
    26. Table skins;
    27.  
    28. public void onDisable()
    29. {
    30. System.out.print("HDSkinner is disabled");
    31. }
    32.  
    33. public void onEnable()
    34. {
    35. sql = new SQLite(Logger.getLogger("Minecraft"), "[HDSkinner] ", this.getDataFolder().getAbsolutePath(), "HDSkinner", ".sqlite");
    36. openDatabase();
    37. System.out.print("HDSkinner is enabled");
    38. server = this.getServer();
    39. playerListener pListener = new playerListener();
    40. Bukkit.getServer().getPluginManager().registerEvents(pListener , this);
    41. }
    42.  
    43. public boolean onCommand(CommandSender sender,Command command, String commandLabel,String args[])
    44. {
    45.  
    46. if (sender instanceof Player)
    47. {
    48. Player player = (Player) sender;
    49. SpoutPlayer splayer = SpoutManager.getPlayer(player);
    50. if(commandLabel.equalsIgnoreCase("skin"))
    51. {
    52. if (args.length == 1)
    53. {
    54. if (args[0].equalsIgnoreCase("help"))
    55. {
    56. player.sendMessage(ChatColor.BLUE + "Type the command skin followed by the url to change your skin to that url.");
    57. }
    58. else
    59. {
    60. try {
    61. String playername = "\"" + player.getDisplayName() + "\"";
    62. String link = "\"" + args[0] + "\"";
    63. ResultSet results = sql.query("SELECT user FROM userdata WHERE user=" + playername);
    64. if (!results.isBeforeFirst() ) {
    65. String query = "INSERT INTO userdata (user,skin) VALUES (" + playername + "," + link + ")";
    66. sql.query(query);
    67. }
    68. else {
    69. String query = "UPDATE userdata SET skin=" + link + " WHERE user=" + playername;
    70. sql.query(query);
    71. }
    72. } catch (SQLException e) {
    73. // TODO Auto-generated catch block
    74. e.printStackTrace();
    75. }
    76. splayer.setSkin(args[0]);
    77. }
    78. }
    79. else
    80. {
    81. player.sendMessage(ChatColor.DARK_RED + "Arguments mismatch. Type the skin command followed by help.");
    82. }
    83. }
    84. if(commandLabel.equalsIgnoreCase("cape"))
    85. {
    86. if (args.length == 1)
    87. {
    88. if (args[0].equalsIgnoreCase("help"))
    89. {
    90. player.sendMessage(ChatColor.BLUE + "Type the command cape followed by the url to change your cape to that url.");
    91. }
    92. else
    93. {
    94. try {
    95. String playername = "\"" + player.getDisplayName() + "\"";
    96. String link = "\"" + args[0] + "\"";
    97. ResultSet results = sql.query("SELECT user FROM userdata WHERE user=" + playername);
    98. if (!results.isBeforeFirst() ) {
    99. String query = "INSERT INTO userdata (user,cape) VALUES (" + playername + "," + link + ")";
    100. sql.query(query);
    101. }
    102. else {
    103. String query = "UPDATE userdata SET cape=" + link + " WHERE user=" + playername;
    104. sql.query(query);
    105. }
    106. } catch (SQLException e) {
    107. // TODO Auto-generated catch block
    108. e.printStackTrace();
    109. }
    110. splayer.setCape(args[0]);
    111. }
    112. }
    113. else
    114. {
    115. player.sendMessage(ChatColor.DARK_RED + "Arguments mismatch. Type the cape command followed by help.");
    116. }
    117. }
    118. }
    119. return true;
    120. }
    121.  
    122. public void openDatabase() {
    123. if (!sql.open())
    124. sql.open();
    125. try {
    126. sql.query("CREATE TABLE if not exists userdata(user TEXT, skin TEXT, cape TEXT)");
    127. } catch (SQLException e) {
    128. // TODO Auto-generated catch block
    129. e.printStackTrace();
    130. }
    131. }
    132.  
    133. public void closeDatabase() {
    134. if (sql.open())
    135. sql.close();
    136. }
    137.  
    138. }
    139.  


    Error:
    Code:
    2013-06-27 23:22:36 [SEVERE] Could not pass event PlayerJoinEvent to HDSkinner v0.1
    org.bukkit.event.EventException
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:427)
        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.v1_5_R3.PlayerList.c(PlayerList.java:204)
        at net.minecraft.server.v1_5_R3.PlayerList.a(PlayerList.java:100)
        at net.minecraft.server.v1_5_R3.PendingConnection.d(PendingConnection.java:129)
        at net.minecraft.server.v1_5_R3.PendingConnection.c(PendingConnection.java:44)
        at net.minecraft.server.v1_5_R3.DedicatedServerConnectionThread.a(DedicatedServerConnectionThread.java:41)
        at net.minecraft.server.v1_5_R3.DedicatedServerConnection.b(SourceFile:29)
        at net.minecraft.server.v1_5_R3.MinecraftServer.r(MinecraftServer.java:581)
        at net.minecraft.server.v1_5_R3.DedicatedServer.r(DedicatedServer.java:226)
        at net.minecraft.server.v1_5_R3.MinecraftServer.q(MinecraftServer.java:477)
        at net.minecraft.server.v1_5_R3.MinecraftServer.run(MinecraftServer.java:410)
        at net.minecraft.server.v1_5_R3.ThreadServerApplication.run(SourceFile:573)
    Caused by: java.lang.NullPointerException
        at com.kmccmk9.HDSkinner.playerListener.onPlayerJoin(playerListener.java:20)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:425)
        ... 14 more
     
  2. Offline

    caseif

    Line 20 is represented by:
    Code:java
    1. ResultSet results = plugin.sql.query("SELECT skin FROM userdata WHERE user="+ playername);

    On this line, plugin, sql, or playername could be null. Debug a bit or just double-check your code to figure out which one.
     
  3. Offline

    kmccmk9


    Thanks for responding. Okay sql is null. Which is odd cause when sql is executed from my main class there are no problems. How do I fix this?


    I can't seem to figure out how to fix it though because sql is initialized in the onEnable.

    EDIT by Moderator: merged posts, please use the edit button instead of double posting.
     
    Last edited by a moderator: Jun 2, 2016
  4. Offline

    Minnymin3

    Players don't have display names usually. Do player.getName() instead.
     
  5. Offline

    kmccmk9

    Okay using this line, I figured out what is the problem. However, even using just this line it is somehow null. I'm using an if statement to check if it is null, yet it is not entering the if statement because the System out line is not printed. Please help

    Code:java
    1. if ((results = sql.query("SELECT skin FROM userdata WHERE user=" + playername)) == null)
    2. System.out.println("results is null");
     
Thread Status:
Not open for further replies.

Share This Page