2016-03-29 3 views
0

現在、私は現在、プレーヤーのHPと現在のキルを追跡するスコアボードを更新しようとしていますが、私は運があまりありません。私はいろいろなことを試してきましたが、今は2時間以上頑張っています。問題は、プレイヤーHPを取得して殺すときにある。以下のエラーはkill問題のエラーですが、もう一つの問題はHPがヌルを返すことでUnhandled Exceptionです。ここ にエラーがあります:ここで新しいプラグインコードで未処理の例外がわかりません。 Null [Minecraft Java]

enter image description here

は、コードは次のとおりです。 ライン144 - Main.java

@SuppressWarnings("deprecation") 
public void run(String arena){ 
    for(String key : Handler.playerMap.keySet()){ 
     if (Handler.playerMap.get(key).contains(arena)){ 
      Player pt = Bukkit.getPlayer(key); 
      String p = pt.getDisplayName(); 
      ScoreboardManager manager = Bukkit.getScoreboardManager(); 
      Scoreboard board = manager.getNewScoreboard(); 
      Objective objective = board.registerNewObjective("test", "dummy"); 
      objective.setDisplaySlot(DisplaySlot.SIDEBAR); 
      objective.setDisplayName(ChatColor.AQUA + "Wave: "); 
      Score score = objective.getScore(ChatColor.GREEN + "" + pt.getHealth() + ChatColor.WHITE + p + ChatColor.AQUA); 
      int kills = PlayerHandler.kills.get(p); 
      score.setScore(kills); 
      int pcheck = 0; 

の162は、誰もが問題が何であるかを教えてもらえますか?ご意見ありがとうございます。

+1

可能PlayerHandler.killsがnull – Rustam

答えて

0

あなたが指摘したように、PlayerHandler.killsがnullを返したとき、またはプレーヤーHPがnullを返すときにこれが起こっています。これが発生している理由は、nullオブジェクトに対してメソッドを実行しようとしているためです。上記の例では、NULLオブジェクトのget(p)を試すと、この例外が発生します。

nullityチェックを追加してオブジェクトがヌルでないことを確認してからメソッドを呼び出すことで、NullPointerExceptionsを回避できます。たとえば、以下のいずれかのキルがあるかどうかをチェックすると、ゼロにスコアを設定していない場合:

int kills = 0; 
if (PlayerHandler.kills != null) { 
    kills = PlayerHandler.kills.get(p); 
} 
score.setScore(kills); 

あなたは、HPがnullの事態を避けるために、類似した何かをする必要があります。

ヌルポインタについて詳しくは、this articleを参照してください。

0

免責事項:私はMinecraftプラグインの開発に関する経験は全くありません。しかし、私はMinecraft Mod開発の経験があります。

問題は、誰も誰も殺していないということです。例外スタックトレースは、例外がライン160上に発生したことを述べている:

int kills = PlayerHandler.kills.get(p); 

A NullPointerException何かがnullであることを示しています。この行では、PlayerHandler.killspだけをnullにすることができます。ただし、pは実際にはプレイヤーの表示名であり、プレイヤーは表示名としてnullを持つことはできません。したがってp == nullの可能性は排除されます。

ヌルにできるのは1つだけです。killsです。 killsHashMap<String, Integer>であると私は信じています。私の常識によれば、これはキーとしてのすべてのプレイヤー名と、プレイヤーが持っているキルの数を値として含むマップです。

なぜ、ハッシュマップはnullですか?多分、誰もまだ殺されていないかもしれない。私はMinecraftのスコアボードを使いこなしていましたが、0点以外の点では「スコアがありません」ということも知っています。これはソースにnullと表示されていると思います。

解決方法:

多くの方法があります。

  • キル(あなたがFOREVER ALONEある場合)誰か
  • は、マップが(推奨)nullであるかどうかを確認するためのチェックを追加
  • 矢印やポーションで

を自分自身を殺すここにありますチェック:

int kills = 0; 
if (PlayerHandler.kills != null) { 
    kills = PlayerHandler.kills.get(p); 
} 
score.setScore(kills); 
+0

'p'がヌルであっても、あなたはこの行に' NullPointerException'を取得しません – tddmonkey

-1

ただし、PlayerHandler.killsのデータはnullではありません。入社時に

これは、プレイヤーが設定されますが殺す:

@EventHandler 
public void onPlayerLogin(PlayerJoinEvent e) { 

    String player = e.getPlayer().getName(); 
         if(!PlayerHandler.GPlayed.containsKey(player)){ 
          PlayerHandler.GPlayed.put(player, 0); 
         } 
         if(!PlayerHandler.kills.containsKey(player)){ 
          PlayerHandler.kills.put(player, 0); 
         } 
         if(!PlayerHandler.HRound.containsKey(player)){ 
          PlayerHandler.HRound.put(player, 0); 
         } 

} 

そして、ここでは、私が作成しようとしたが、同じエラーがまだ関連のチェックがすべて正しいことで撮影デバッグです。

@SuppressWarnings("deprecation") 
public void run(String arena){ 
    for(String key : Handler.playerMap.keySet()){ 
     if (Handler.playerMap.get(key).contains(arena)){ 
      Player pt = Bukkit.getPlayer("Nubzz"); 
      String p = pt.getDisplayName(); 
      Player nubzz = Bukkit.getPlayer("Nubzz"); 
      nubzz.sendMessage(key); 
      nubzz.sendMessage(pt + ""); 
      nubzz.sendMessage(p); 
      ScoreboardManager manager = Bukkit.getScoreboardManager(); 
      Scoreboard board = manager.getNewScoreboard(); 
      Objective objective = board.registerNewObjective("test", "dummy"); 
      objective.setDisplaySlot(DisplaySlot.SIDEBAR); 
      objective.setDisplayName(ChatColor.AQUA + "Wave: "); 
      Score score = objective.getScore(ChatColor.GREEN + "" + pt.getHealth() + ChatColor.WHITE + p + ChatColor.AQUA); 
      int kills = PlayerHandler.kills.get(p); 
      score.setScore(kills); 
      int pcheck = 0; 

これは、デバッグ作業を示しており、プレイヤーを示すことはキル(たぶん私は間違っている変数の値をチェックしています)があります: https://gyazo.com/35a83b11a1fb384789a15ae54116248d

0

すべての静的変数が正しく行int kills = PlayerHandler.kills.get(p);を初期化していると仮定すると、することができ、まだNullPointerExceptionが原因

これは、NullPointerException

をスローしますプリミティブ変数に nullを割り当てよう
関連する問題