我正在制作一个bukkit插件,并且正在使用config.yml并具有一个布尔值来访问该配置,但是由于我是在另一个类中引用它的,因此它必须是静态的,我认为这会导致其中断。不知道如何解决。
错误讯息:
at net.minecraft.server.v1_8_R3.MinecraftServer.B(MinecraftServer.java:673) [craftbukkit-1.8.8.jar:git-Bukkit-efe04b8]
net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:335) [craftbukkit-1.8.8.jar:git-Bukkit-efe04b8]
net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:629) [craftbukkit-1.8.8.jar:git-Bukkit-efe04b8]
net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java:537) [craftbukkit-1.8.8.jar:git-Bukkit-efe04b8]
7:28:03 AM at java.lang.Thread.run(Thread.java:745) [?:1.8.0_65]
7:28:03 AM Caused by: java.lang.NullPointerException
7:28:03 AM at otherResources.PermissionHandler.getPerm(PermissionHandler.java:16) ~[?:?]
7:28:03 AM at main.Main.onCommand(Main.java:33) ~[?:?]
7:28:03 AM at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit-1.8.8.jar:git-Bukkit-efe04b8]
编码:
package main;
import java.util.Arrays;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.plugin.java.JavaPlugin;
import otherResources.PermissionHandler;
public class Main extends JavaPlugin{
public void onEnable(){
new PermissionHandler(this);
getLogger().info("Green lantern class is now active.");
this.getConfig().addDefault("permsgl", "");
this.getConfig().options().copyDefaults(true);
saveConfig();
}
public void onDisable(){
getLogger().info("Green lantern class is not active.");
saveConfig();
}
@SuppressWarnings("deprecation")
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
Player p = (Player) sender;
if(cmd.getName().equalsIgnoreCase("pring") && otherResources.PermissionHandler.getPerm(p)){
ItemStack PowerRing = new ItemStack(Material.SLIME_BALL);
ItemMeta PowerRingMeta = PowerRing.getItemMeta();
PowerRingMeta.setDisplayName(ChatColor.GREEN + "Power Ring");
PowerRingMeta.setLore(Arrays.asList(ChatColor.DARK_GREEN + "Mode: Laser"));
p.getInventory().addItem(PowerRing);
Bukkit.broadcastMessage("Spawn Ring is in Order");
return true;
}
if(cmd.getName().equalsIgnoreCase("gladd") && (p.isOp())){
Player t = Bukkit.getServer().getPlayer(args[1]);
otherResources.PermissionHandler.givePerm(t);
Bukkit.broadcastMessage("Spawn Ring is in Order");
if(!t.isOnline()){
p.sendMessage(ChatColor.RED + "ERROR! " + ChatColor.YELLOW + args[1] + " is either offline or does not exist." );
return true;
}
}
else{
return true;
}
return true;
}
}
如果您查看错误消息:
7:28:03 AM Caused by: java.lang.NullPointerException
7:28:03 AM at otherResources.PermissionHandler.getPerm(PermissionHandler.java:16) ~[?:?]
7:28:03 AM at main.Main.onCommand(Main.java:33) ~[?:?]
7:28:03 AM at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[craftbukkit-1.8.8.jar:git-Bukkit-efe04b8]
在您的代码中,您正在调用对象上的某些对象 null
它发生在这里:
otherResources.PermissionHandler.getPerm(p) // line 33
因为您是getPerm
像您所说的那样静态调用的,并且:
为此,您可以在构造函数中分配主变量(帖子已编辑,因此删除了第二个类):
public PermissionHandler(Main plugin) {
configGetter = plugin; // Assigning inside constructor
}
但是,当您创建对象时,不要使用变量:
public void onEnable(){
new PermissionHandler(this); // You create it, but don't assign it to a value, or use the value
}
因此,您正在创建对象的实例,但未使用它,而是在调用静态方法,这意味着它不了解变量。
在解决问题方面:
但是由于我是在另一个类中引用它,所以它必须是静态的,我认为这会导致它中断。不知道如何解决。
最简单的解决方案是使用Singleton设计模式。它允许您创建一个对象的单个实例(因此可以让您分配该Main变量),同时提供对该对象的全局引用(即,您可以像使用静态变量一样使用它)。我建议阅读一下。
其他解决方案:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句