NullPointerException Tableau Java

[Résolu/Fermé]
Signaler
Messages postés
180
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
27 juin 2015
-
Messages postés
180
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
27 juin 2015
-
Salut ! Je suis actuellement entrain de coder un plugin Mincraft sous Spigot 1.8.7 qui ressemble un peu à un de genre BuildingGame ou BuildBattle (Hypixel) et j'ai une erreur NullPointerException sur un tableau. La plupart du temps ça vient du fait qu'on ecrit "int[] tab;" au lieu de "int[] tab = new int[8];" mais dans mon cas j'ai bien déclaré mon tableau. Je pense que c'est un petit probleme tout con mais je vois vraiment pas ^^

J'ai vu sur StackOverflow que si on met le tableau hors du constructeur ça règle ce problème mais ça m'embête vraiment de faire ca :/

Code d'erreur:
[12:19:23] [Server thread/ERROR]: Could not pass event PlayerInteractEvent to BuildTime v0.3
org.bukkit.event.EventException
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:310) ~[spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:62) ~[spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:502) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:487) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:227) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:194) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at org.bukkit.craftbukkit.v1_8_R3.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:190) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.PlayerConnection.a(PlayerConnection.java:694) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:52) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.PacketPlayInBlockPlace.a(PacketPlayInBlockPlace.java:1) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.PlayerConnectionUtils$1.run(SourceFile:13) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) [?:1.7.0]
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) [?:1.7.0]
	at java.util.concurrent.FutureTask.run(FutureTask.java:166) [?:1.7.0]
	at net.minecraft.server.v1_8_R3.SystemUtils.a(SystemUtils.java:19) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:718) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:367) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:657) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:560) [spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	at java.lang.Thread.run(Thread.java:722) [?:1.7.0]
Caused by: java.lang.NullPointerException
	at fr.TriiNoxYs.BuildTime.handlers.Plot.setVotes(Plot.java:69) ~[?:?]
	at fr.TriiNoxYs.BuildTime.handlers.Votes.setVote(Votes.java:76) ~[?:?]
	at fr.TriiNoxYs.BuildTime.events.Players.onInterractWithItem(Players.java:144) ~[?:?]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[?:1.7.0]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.7.0]
	at java.lang.reflect.Method.invoke(Method.java:601) ~[?:1.7.0]
	at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306) ~[spigot-1.8.7.jar:git-Spigot-3ccbe77-a6a57a9]
	... 19 more 


Code:
public class Plot{
    
    private int plotID;
    private Player owner;
    private Location loc;
    private int votes[] = new int[8];
    private int score;
    
    public Plot(int plotID, Player owner, Location loc, int votes[], int score){
        this.plotID = plotID;
        this.owner = owner;
        this.loc = loc;
        this.votes = votes;
    }
    
    public int getPlotID(){
        return plotID;
    }
    
    public Player getOwner(){
        return owner;
    }
    
    public Location getLoc(){
        return loc;
    }
    
    public World getWorld(){
        return loc.getWorld();
    }
    
    public int[] getVotes(){
        return votes;
    }
    
    public int getScore(){
        //score = votes[0]+votes[1]+votes[2]+votes[3]+votes[4]+votes[5]+votes[6]+votes[7];
        
        /*
        for(int i = 0; i < 8; i++){
            score += votes[i];
        }
        */
        
        score = 42;
        return score;
    }
    
    public void setPlotID(int plotID){
        this.plotID = plotID;
    }
    
    public void setOwner(Player owner){
        this.owner = owner;
    }
    
    public void setVotes(int playerID, int vote){
        playerID--;
        //Bukkit.broadcastMessage("votes[0]: " + this.votes[0]);
        votes[playerID] = vote; //La ligne 69 est içi                    <<<------ LIGNE 69
        //Bukkit.broadcastMessage("this.votes[playerID] = vote;");
        //Bukkit.broadcastMessage("votes[0]: " + this.votes[0]);
    }
    
} 


Merci d'avance à ceux qui me répondront et m'aideront :)
Cordialement,
TriiNo'

1 réponse

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 881
Bonjour,

Tu as beau faire
private int votes[] = new int[8];
à l'initialisation de l'objet, la valeur de
votes
sera écrasée au moment du constructeur avec
this.votes = votes;
et à ce moment là, tu dois avoir
votes=null
ce qui provoque le NullPointerException...
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
180
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
27 juin 2015
42
Benh si apres je m'en sert:
 public int[] getVotes(){
        return votes;
    }
    
    public int getScore(){
        //score = votes[0]+votes[1]+votes[2]+votes[3]+votes[4]+votes[5]+votes[6]+votes[7];
        
        for(int i = 0; i < 8; i++){
            score += votes[i];
        }
        
        return score;
    }


EDIT: Ok je viens de comprendre, j'ai suprimmé le parametre mais gardé la variable, je pensais que tu me disais de TOUT suprimmer.
Le constructeur ressemble à ça maintenant:
public Plot(int plotID, Player owner, Location loc, int score){
        this.plotID = plotID;
        this.owner = owner;
        this.loc = loc;
    }
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 881
Du coup tu ne te sers plus de
score
non plus ? Tu peux le supprimer aussi alors ;-)

Personnellement je préfère tout initialiser dans le constructeur plutôt que dans les variables déclarées plus haut, ici ça ne changera rien, mais si tu avais une erreur il vaut mieux qu'elle soit dans le constructeur plutôt qu'au niveau de la classe, c'est plus facile à déboguer le jour où ça arrive.

    private int plotID;
    private Player owner;
    private Location loc;
    private int votes[];
    private int score;
    
    public Plot(int plotID, Player owner, Location loc) {
        this.plotID = plotID;
        this.owner = owner;
        this.loc = loc;
        this.votes = new int[8];
        this.score = 0;
    }
Messages postés
180
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
27 juin 2015
42 >
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021

Enfaite moi je croyais que TOUTES les variables devaient etres dans la classe ET dans le constructeur :p
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 881
En fait tu peux faire ce que tu veux, il est même possible de définir plusieurs constructeurs avec différents jeux de paramètres pour pouvoir s'adapter aux besoin, du coup effectivement il n'y a pas de raison d'avoir toujours tous les paramètres dans le constructeur.
Messages postés
180
Date d'inscription
lundi 14 juillet 2014
Statut
Membre
Dernière intervention
27 juin 2015
42
D'accord merci du conseil :)
Et merci de m'avoir ça à résolu mon problème.