2014-03-18 49 views
2

當試圖加載在我bukkit服務器的插件,但在Eclipse中沒有錯誤我有一個NullPointerException異常。我的插件是一個拉什插件,很多東西沒有被使用/丟失。 的錯誤是這樣的:的Java NullPointException Bukkit插件

[18:11:10] [Server thread/ERROR]: Could not load 'plugins\rush.jar' in folder 'plugins' 
org.bukkit.plugin.InvalidPluginException: java.lang.NullPointerException 
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:182) ~       [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at org.bukkit.plugin.SimplePluginManager.loadPlugin(SimplePluginManager.java:308) ~ [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager.java:231) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at org.bukkit.craftbukkit.v1_7_R1.CraftServer.loadPlugins(CraftServer.java:255) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at org.bukkit.craftbukkit.v1_7_R1.CraftServer.<init>(CraftServer.java:233) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at net.minecraft.server.v1_7_R1.PlayerList.<init>(PlayerList.java:63) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at net.minecraft.server.v1_7_R1.DedicatedPlayerList.<init>(SourceFile:14) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at net.minecraft.server.v1_7_R1.DedicatedServer.init(DedicatedServer.java:126) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at net.minecraft.server.v1_7_R1.MinecraftServer.run(MinecraftServer.java:424) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
at net.minecraft.server.v1_7_R1.ThreadServerApplication.run(SourceFile:617) [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
Caused by: java.lang.NullPointerException 
at me.mailh.Rush.MainRush.<init>(MainRush.java:62) ~[?:?] 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.7.0_45] 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[?:1.7.0_45] 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~ [?:1.7.0_45] 
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[?:1.7.0_45] 
at org.bukkit.plugin.java.JavaPluginLoader.loadPlugin(JavaPluginLoader.java:178) ~ [craftbukkit.jar:git-Bukkit-1.7.2-R0.2-b2974jnks] 
... 9 more 

這裏是我的代碼:

package me.mailh.Rush; 

import java.io.File; 
import java.util.logging.Logger; 

import org.bukkit.Bukkit; 
import org.bukkit.ChatColor; 
import org.bukkit.Location; 
import org.bukkit.World; 
import org.bukkit.WorldCreator; 
import org.bukkit.command.Command; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.EntityType; 
import org.bukkit.entity.Player; 
import org.bukkit.event.EventHandler; 
import org.bukkit.event.Listener; 
import org.bukkit.event.entity.PlayerDeathEvent; 
import org.bukkit.event.player.PlayerQuitEvent; 
import org.bukkit.plugin.java.JavaPlugin; 
import org.bukkit.scoreboard.Scoreboard; 
import org.bukkit.scoreboard.ScoreboardManager; 
import org.bukkit.scoreboard.Team; 

public class MainRush extends JavaPlugin implements Listener{ 


public final Logger logger = Logger.getLogger("Minecraft"); 
public static MainRush plugin; 





public void onEnable(){ 
    this.logger.info("Rush is enabled."); 
    getServer().getPluginManager().registerEvents(this, this); 
} 


    private ScoreboardManager manager = Bukkit.getScoreboardManager(); 
    private Scoreboard board = manager.getNewScoreboard(); 
    private Team bleu = board.registerNewTeam("bleu"); 
    private Team orange = board.registerNewTeam("orange"); 


public void onDisable(){ 
    this.logger.info("Rush is disabled."); 
} 



public boolean onCommand(CommandSender s, Command c, String lbl, String[] args){ 
    Player pl = (Player) s; 
    if (lbl.equalsIgnoreCase("rush")){ 
     if (args.length == 0){ 
     World w = Bukkit.getWorld("rush"); 


     Location rush = new Location(w, -210, 51, -8); 
     pl.sendMessage(ChatColor.GOLD + "Teleportation..."); 
     pl.teleport(rush); 
     } 

     if (args[0].equalsIgnoreCase("bleu")){ 
      board.resetScores(pl.getPlayer()); 
      orange.removePlayer(pl.getPlayer()); 
      bleu.addPlayer(pl.getPlayer()); 
      pl.sendMessage(ChatColor.AQUA + "Vous êtes dans l'équipe bleu"); 
      bleu.setAllowFriendlyFire(false); 

      } 
     if (args[0].equalsIgnoreCase("leave")){ 
      board.resetScores(pl.getPlayer()); 
      bleu.removePlayer(pl.getPlayer()); 
      orange.removePlayer(pl.getPlayer()); 
      pl.sendMessage(ChatColor.RED + "Vous avez quitté votre équipe"); 

     } 
     if (args[0].equalsIgnoreCase("orange")){ 
      board.resetScores(pl.getPlayer()); 
      bleu.removePlayer(pl.getPlayer()); 
      orange.addPlayer(pl.getPlayer()); 
      pl.sendMessage(ChatColor.GOLD + "Vous êtes dans l'équipe orange"); 
      orange.setAllowFriendlyFire(false); 

     } 

     } 


    return true; 
    } 
public void rollback(){ 
if(Bukkit.getServer().unloadWorld("rush",false)) 
{ 
new File("rush").delete(); 
Bukkit.getServer().createWorld(new WorldCreator("rush")); 
} 
} 




@EventHandler 
public void onLeave(PlayerQuitEvent e){ 
Player p = (Player) e.getPlayer(); 
    bleu.removePlayer(p); 
    orange.removePlayer(p); 
    board.resetScores(p); 

} 
@EventHandler 
public void Death(PlayerDeathEvent event){ 
if (event.getEntityType() == EntityType.PLAYER){ 
Player player = event.getEntity(); 
    Team team = board.getPlayerTeam(player); 
if(team.equals(bleu)){ 
player.sendMessage("did it work? bleu"); 
} 
else if (team.equals(orange)){ 
player.sendMessage("did it work orange?"); 
} 
} 
} 
} 
+0

你說明這行中出現的錯誤? – kabb

+0

@kabb正如我所說我在Eclipse中沒有錯誤。所以我不知道這條線。 – user3435369

+0

發生錯誤的行位於堆棧跟蹤中。它說MainRush類中的第62行。哪條線是62線? – kabb

回答

7

這似乎驗證碼:

private ScoreboardManager manager = Bukkit.getScoreboardManager(); 
private Scoreboard board = manager.getNewScoreboard(); 

的原因是你沒有內部聲明這些變量的方法,所以,他們得到加載就是所謂的onEnable()方法之前,使得它使你不能使用任何Bukkit因爲它Bukkit尚未初始化ialized。

我建議做的是做這樣的事情之外的任何方法:在

private ScoreboardManager manager; 
private Scoreboard board; 

那麼這樣做你的onEnable()

manager = Bukkit.getScoreboardManager(); 
board = manager.getNewScoreboard(); 

所以,你會是這樣的:

public class MainRush extends JavaPlugin implements Listener{ 

    private ScoreboardManager manager; 
    private Scoreboard board; 

    @Override 
    public void onEnable(){ 
     //plugin enabled 
     manager = Bukkit.getScoreboardManager(); 
     board = manager.getNewScoreboard(); 
    } 
} 

土井NG這個,你消除得到一個NullPointerException當加載插件的機會。作爲一般的經驗法則,除了方法之外,你不應該從bukkit中獲得任何東西。