Java files.getPlayerConfig().contains()引发NullPointerException
因此,我目前正在开发一个Bukkit(技术上是插口插件),我希望它在一个文件(players.yml)中生成一个字符串,当一个玩家第一次加入时 我目前有:Java files.getPlayerConfig().contains()引发NullPointerException,java,nullpointerexception,Java,Nullpointerexception,因此,我目前正在开发一个Bukkit(技术上是插口插件),我希望它在一个文件(players.yml)中生成一个字符串,当一个玩家第一次加入时 我目前有: public void onPlayerJoin(PlayerJoinEvent e){ String player = e.getPlayer().getName().toString(); if(!files.getPlayersConfig().contains(player)) { files.get
public void onPlayerJoin(PlayerJoinEvent e){
String player = e.getPlayer().getName().toString();
if(!files.getPlayersConfig().contains(player)) {
files.getPlayersConfig().set(player + ".enabled", true);
files.getPlayersConfig().set(player + ".money", 100);
files.savePlayersConfig();
files.reloadPlayersConfig();
}
}
我基本上想做的是在每个玩家第一次加入时在文件中创建一个字符串“player”
例如,如果一个球员的名字鲍勃第一次加入,该文件将生成
bob:
enabled: true
money: 100
但是,我不希望每次玩家加入时都重置它,因此我试图让它检查文件是否包含“bob”,如果返回null,它将创建它。我的问题是它显示为一个错误,而不是仅仅创建它,所以它不是空的
(很抱歉措辞不好,但有点难以解释。)
谢谢
日志:
按要求的主要类别:
公共类MCEP_Base扩展了JavaPlugin{
私有静态插件
public File configFile = new File(this.getDataFolder(), "config.yml");
public FileConfiguration config = YamlConfiguration.loadConfiguration(configFile);
public File playersFile = new File(this.getDataFolder(), "players.yml");
public FileConfiguration players = YamlConfiguration.loadConfiguration(playersFile);
public void onEnable(){
plugin = this;
//config
config.options().copyDefaults(true);
config.addDefault("Enabled", "true");
this.saveCustomConfig();
players.options().copyDefaults(true);
players.addDefault("Enabled", true);
this.savePlayersConfig();
//Logger
this.getLogger().log(Level.FINEST, "[McEcon+] Enabling.");
//Commands
getCommand("econ").setExecutor(new MCEP_Econ());
getCommand("pay").setExecutor(new MCEP_Pay());
getCommand("sell").setExecutor(new MCEP_Sell());
//Events
registerEvents(this, new MCEP_CreatePlayers());
}
public void onDisable(){
plugin = null;
}
public static void registerEvent(Plugin plugin, Listener... listeners){
for(Listener listener : listeners){
Bukkit.getServer().getPluginManager().registerEvents(listener, plugin);
}
}
public static Plugin getPlugin() {
return plugin;
}
public void saveCustomConfig(){
try{
config.save(configFile);
}catch(IOException ex){
ex.printStackTrace();
}
}
public void savePlayersConfig(){
try{
players.save(playersFile);
}catch(IOException ex){
ex.printStackTrace();
}
}
public FileConfiguration getCustomConfig(){
if(config == null){
saveCustomConfig();
}
return config;
}
public FileConfiguration getPlayersConfig() {
if (players == null) {
savePlayersConfig();
}
return players;
}
public void reloadCustomConfig(){
if(configFile == null){
configFile = new File(getDataFolder(), "config.yml");
}
config = YamlConfiguration.loadConfiguration(configFile);
config.set("Enabled", true);
}
public void reloadPlayersConfig(){
if(playersFile == null){
playersFile = new File(getDataFolder(), "players.yml");
}
players = YamlConfiguration.loadConfiguration(playersFile);
players.set("Enabled", true);
}
public static void registerEvents(org.bukkit.plugin.Plugin plugin, Listener... listeners) {
for (Listener listener : listeners) {
Bukkit.getServer().getPluginManager().registerEvents(listener, plugin);
}
}
}
与我的Listener类一起:
公共类MCEP_CreatePlayers实现侦听器{
MCEP_基本文件
@EventHandler()
public void onPlayerJoin(PlayerJoinEvent e){
String player = e.getPlayer().getName().toString();
if(files == null){
MCEP_Base.getPlugin().getLogger().warning("Test");
}else if(files.getPlayersConfig() == null){
MCEP_Base.getPlugin().getLogger().warning("Test1");
}
else if(!files.players.contains(player)) {
files.getPlayersConfig().set(player + ".enabled", true);
files.getPlayersConfig().set(player + ".money", 100);
files.savePlayersConfig();
files.reloadPlayersConfig();
}
}
}您可以添加另一项检查,查看GetPlayerConfig()是否返回空值:
if(files.getPlayersConfig() == null) {
// handle this case
}
else if(!files.getPlayersConfig().contains(player)) {
// continue with rest of your code
}
您能显示代码的空保护部分吗?不,它不会返回异常。文件为null或GetPlayerConfig()的返回值为。我知道GetPlayerConfig()的返回值为null。但是,如果它返回null,我希望它做一些事情。如果您想知道
files.getPlayersConfig()
是否为null。。。然后,如果(files.getPlayersConfig()==null){…},则执行。。。与任何其他一样,如果@EJP我得到的唯一反对票是你和我从其他人那里看到的,他们不会感到困惑。是的,这不是一个合适的标题,但你需要常识才能知道我在说什么。当我这样做的时候,如果(files.getPlayersConfig()==null){…},它仍然会在那一行返回NullPointerException。如果你仍然得到一个NPE,这意味着files对象本身为null。你能检查files==null,看看是否是这样吗?所以files
是null。
显然。“files”返回null,但“files”是我的主类的反射。(MCEP_Base files;)并且不是实际文件。(不相关,但只是指出了这一点。)嗯,您需要发布完整的代码,包括主类,因为异常可能由此产生。
if(files.getPlayersConfig() == null) {
// handle this case
}
else if(!files.getPlayersConfig().contains(player)) {
// continue with rest of your code
}