2017-11-14 1 views
0

Spigot Plugin에 버그가 있습니다./samrandom true/false를 시도하면 null 포인터가 반환됩니다. Main 클래스 :NPE on plugin.getConfig(). set (..., ...);

package com.vandendaelen.simpleautomessage; 

import java.io.File; 
import java.util.List; 
import java.util.Random; 

import org.bukkit.Bukkit; 
import org.bukkit.entity.Player; 
import org.bukkit.plugin.java.JavaPlugin; 
import org.bukkit.scheduler.BukkitScheduler; 

import com.vandendaelen.simpleautomessage.Commands.CommandSamRandom; 
import com.vandendaelen.simpleautomessage.Commands.CommandSamTime; 

public class SimpleAutoMessage extends JavaPlugin { 
    public static final String RANDOM_CONFIG ="Random enabled"; 
    private int iMessages = 0; 

    @Override 
    public void onDisable() { 
     // TODO Auto-generated method stub 
     super.onDisable(); 
    } 

    @Override 
    public void onEnable() { 
     System.out.println("Waw, an amazing plugin powered by LotuxPunk ! :-)"); 
     this.getCommand("samtime").setExecutor(new CommandSamTime(this)); 
     this.getCommand("samrandom").setExecutor(new CommandSamRandom(this, RANDOM_CONFIG)); 
     createConfig(); 

     this.getConfig().addDefault(RANDOM_CONFIG, false); 
     this.getConfig().options().copyDefaults(true); 
     saveConfig(); 

     //Enable display of messages 
     if(getConfig().getBoolean("Enable")) { 
      if(getConfig().getBoolean(RANDOM_CONFIG)) { 
       messageRandomDisplayer(); 
      } else { 
       messageDisplayer(); 
      } 
     } 


    } 

    private void createConfig() { 
     try { 
      if (!getDataFolder().exists()) { 
       getDataFolder().mkdirs(); 
      } 
      File file = new File(getDataFolder(), "config.yml"); 
      if (!file.exists()) { 
       getLogger().info("Config.yml not found, creating!"); 
       saveDefaultConfig(); 
      } else { 
       getLogger().info("Config.yml found, loading!"); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    ... 

} 

Command 클래스 :

package com.vandendaelen.simpleautomessage.Commands; 

import org.bukkit.command.Command; 
import org.bukkit.command.CommandExecutor; 
import org.bukkit.command.CommandSender; 
import org.bukkit.entity.Player; 
import org.bukkit.plugin.Plugin; 

public class CommandSamRandom implements CommandExecutor { 

    private String RANDOM_CONFIG; 
    private Plugin plugin; 

    public CommandSamRandom(Plugin pl, String r) { 
     pl = plugin; 
     RANDOM_CONFIG = r; 
     //System.out.println(plugin.getConfig().getBoolean(RANDOM_CONFIG)); 
    } 

    @Override 
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { 
     Player p = (Player)sender; 
     if(args[0]!="") { 
      Boolean randomEnabled = Boolean.parseBoolean(args[0]); 
      if(p.hasPermission("simpleautomessage.setrandom")||p.isOp()) { 
       plugin.getConfig().set(RANDOM_CONFIG, randomEnabled); 

       if(randomEnabled) { 
        p.sendMessage("§2Random enabled"); 
       } else { 
        p.sendMessage("§4Random disabled"); 
       } 
       plugin.saveConfig(); 
       plugin.reloadConfig(); 
       return true; 
      } 
     } 

     return false; 
    } 

} 

구성 파일이 내 코드입니다

#Time between 2 messages (minutes) 
Time: 15 
#Auto-Messages ! 
Enable: true 

#Broadcast randomly your messages 
Random enabled: false 

Messages: 
    - "A simple string" 
    - "Another string" 
    - "Don't forget to support/rate LotuxPunk on Curse/Bukkit website !" 

결과 :

[20:56:05 INFO]: LotuxPunk issued server command: /samrandom true 
[20:56:05 ERROR]: null 
org.bukkit.command.CommandException: Unhandled exception executing command 'samrandom' in plugin SimpleAutoMessage v0.5 
     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spigot.jar:git-Spigot-d21162c-61e0c69] 
     at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141) ~[spigot.jar:git-Spigot-d21162c-61e0c69] 
     ... 
Caused by: java.lang.NullPointerException 
     at com.vandendaelen.simpleautomessage.Commands.CommandSamRandom.onCommand(CommandSamRandom.java:26) ~[?:?] 
     at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spigot.jar:git-Spigot-d21162c-61e0c69] 
     ... 15 more 

사람은 제발 도움이 될 수 있습니다 ? 당신은 다른의 매개 변수 pl insterad에 아직 초기화되지 필드 plugin의 값을 할당

private Plugin plugin; 

public CommandSamRandom(Plugin pl, String r) { 
    pl = plugin; 
} 

: :)

라인 (26)은 귀하의 문제는 생성자에

plugin.getConfig().set(RANDOM_CONFIG, randomEnabled); 

답변

2

입니다 방법 라운드. 더 명확하게하기 위해 인스턴스 필드에 액세스하려고하면 명시 적으로 this.plugin을 사용하는 것이 도움이됩니다.

+1

'plugin'으로 다시 지정하지 않으면'private final Plugin plugin; '으로 선언 할 수 있습니다. 그러면 컴파일러는 생성자에서 정확히 한 번 지정했음을 확인합니다 (버그를 잡기). – tom

+0

빌어 먹을, 오 그것은 OKAY : ' '공공 CommandSamRandom (플러그인 PL, 문자열 R) { \t \t 플러그인 = 와줘을 D; \t \t RANDOM_CONFIG = r; \t \t //System.out.println(plugin.getConfig().getBoolean(RANDOM_CONFIG)); \t}' –