2017-03-05 40 views
-4

有人能告诉我为什么这不起作用吗? 这是一个基本的OOP功能。它有效,但由于某种原因,它停止工作。Java Bukkit OOP

public class InfoboardManager { 
    private MainInfoboard mi; 
    private Player p; 

    public InfoboardManager(Player p) { 
     this.p = p; 
    } 

    public MainInfoboard getMainInfoboard() { 
     return mi; 
    } 

    public class MainInfoboard { 
     public void echoName() { 
      System.out.println("His name is " + p.getName()); 
     } 
    } 

} 

我打电话这样说:

@EventHandler 
    public void onPlayerJoin(PlayerJoinEvent e) { 
     InfoboardManager ib = new InfoboardManager(e.getPlayer()); 
     MainInfoboard mi = ib.getMainInfoboard(); 
     mi.echoName(); 
     e.setJoinMessage(null); 
    } 

非常感谢您!

+1

MainInfoBoard初始化在哪里?只用你当前的代码,它会抛出一个'NullPointerException'。 (你应该能够很容易地解决我的问题?)。除了“不工作”不是对你所期望的有什么不同的正确描述。请包括您的预期,以及获得的结果,包括代码,图像和堆栈跟踪(如果相关)。 – n247s

+0

@ n247s我想将控制台的玩家姓名打印出来。所以当玩家加入时,控制台会写出来:例如,他的名字是eNcoo。 – eNcoo

+0

你不会在任何地方调用'echoName()'。 – Esko

回答

2

初始化您MainInfoboard

public class InfoboardManager { 
private MainInfoboard mi; 
private Player p; 

public InfoboardManager(Player p) { 
    this.p = p; 
    this.mi = new MainInfoboard(); 
} 

public MainInfoboard getMainInfoboard() { 
    return mi; 
} 

public class MainInfoboard { 
    public void echoName() { 
     System.out.println("His name is " + p.getName()); 
    } 
} 
} 

如果是NullPointerException。您可能想告诉我们您收到的错误。

2

private MainInfoboard mi;InfoboardManager类的属性初始化从未