2016-06-23 3 views
-2

다른 방법을 사용하려고하면 여전히 생성자나는 생성자의 내부 변수를 초기화,하지만 난 그래서 여기

private ActionbarTitleObject timer = TitleFactory.newBarTitle(""); 
private Plugin plugin; 
HashMap<String, Parkour> parkours = null; 

public MineJump() {} 

public MineJump(ArrayList<Player> players, String configPath, Plugin plugin) 
{ 
    super(players); 
    this.plugin = plugin; 
    parkours = Parkour.load(configPath, players); 
    System.out.println(parkours.get("p1").getCurrentSpawn()); //here I get the right value 
} 

는 null입니다하지만 난이 방법에 parkours에게 해시 맵을 사용하려고 할 때

@EventHandler 
public void onPlayerMove(PlayerMoveEvent e) 
{ 
    System.out.println(parkours.get("p1").getCurrentSpawn()); //parkours is null here :(
} 

NullPointerException이 발생합니다. 왜 그런가요?

나는 단지 이것에 비 인수 생성자를 사용 : Bukkit.getPluginManager().registerEvents(new MineJump(), this);

오류의 원인이 수? 그렇다면 왜 나에게 설명 할 수 있다면 좋을 것입니다. :)

+0

당신이에 대한 자세한 정보를 제공 할 수 있을까요? –

+1

인수가없는 생성자를 사용 했습니까? 이 null 포인터를 설명합니다. – wtfzn

+0

디버거를 사용하십시오. 그리고 당신이 어딘가에서 예외를 삼키는 지 확인하십시오. – Fildor

답변

0

super()를 호출 할 때 onPlayerMove이 부작용의 결과로 호출 될 것입니다, 당신은 당신의 인수를 생성자를 사용하지 않습니다. 이 생성자는 parkours을 null과 다른 값으로 설정하지 않습니다.

당신은이 같은 인수와 함께 두 번째 생성자를 사용할 필요가

: 당신은`parkours`의 인스턴스를 언제, 어떻게

Bukkit.getPluginManager().registerEvents(new MineJump(players, configPath, plugin), this); 
0

가능한 설명은 당신이 설명한 바와 같이 생성자