2013-11-21 40 views
1

需要一些帮助。我总是得到这个错误:Java错误

ERROR! THREAD NAME: New I/O worker #2 
java.lang.NullPointerException 
    at com.rs.game.player.content.DungeoneeringShop.open(DungeoneeringShop.java:12) 
    at com.rs.game.player.dialogues.DungTutor.run(DungTutor.java:36) 
    at com.rs.game.player.DialogueManager.continueDialogue(DialogueManager.java:31) 
    at com.rs.net.decoders.WorldPacketsDecoder.processPackets(WorldPacketsDecoder.java:1130) 
    at com.rs.net.decoders.WorldPacketsDecoder.decode(WorldPacketsDecoder.java:268) 
    at com.rs.net.ServerChannelHandler.messageReceived(ServerChannelHandler.java:98) 
    at org.jboss.netty.channel.SimpleChannelHandler.handleUpstream(SimpleChannelHandler.java:95) 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:563) 
    at org.jboss.netty.channel.DefaultChannelPipeline.sendUpstream(DefaultChannelPipeline.java:558) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:268) 
    at org.jboss.netty.channel.Channels.fireMessageReceived(Channels.java:255) 
    at org.jboss.netty.channel.socket.nio.NioWorker.read(NioWorker.java:91) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.processSelectedKeys(AbstractNioWorker.java:373) 
    at org.jboss.netty.channel.socket.nio.AbstractNioWorker.run(AbstractNioWorker.java:247) 
    at org.jboss.netty.channel.socket.nio.NioWorker.run(NioWorker.java:35) 
    at org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:102) 
    at org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

这里是我的类:

package com.rs.game.player.content; 

import com.rs.game.player.Player; 

public class DungeoneeringShop { 

    private static final int INTERFACE_ID = 72; 
    public static Player player; 

    public static void open() { 
     for(int i = 69; i < 73; i++) 
      player.getPackets().sendHideIComponent(INTERFACE_ID, i, false); 
     player.getInterfaceManager().sendInterface(INTERFACE_ID); 
    } 
} 
+2

如果你调用open(),请确保播放器初始化... – Joel

回答

3

你必须实例化你的变量player。在你的例子中playernull
例如,如果你有一个参数的构造函数:

public static Player player = new Player(); 
+0

好感谢的人:)它的工作 – Daniel

+0

@ user2229998欢迎您。请接受答案作为正确的答案,以帮助其他谁读这个问题:-) –

4

您还没有initilized player。所以它是null

这就像

null.getPackets() --------------> NullPointerException 

所以分辨率是使用

public static Player player = new Player(); // at declaration level 

player = new Player(); // or later some where before using. 
1

您需要实例

public static Player player; 
012像以前一样初始化

在访问它之前。

+0

感谢的人:) 15个字符的 – Daniel

1

因为你没有初始化玩家对象呢。它应该是:

package com.rs.game.player.content; 

import com.rs.game.player.Player; 

public class DungeoneeringShop { 

private static final int INTERFACE_ID = 72; 
public static Player player; 

public static void open() { 
    player = new Player(); // or some other constructor of this class 
    for(int i = 69; i < 73; i++) 
     player.getPackets().sendHideIComponent(INTERFACE_ID, i, false); 
     player.getInterfaceManager().sendInterface(INTERFACE_ID); 
    } 
} 

我认为你是Java World的新来者。你正在从游戏开发电子书中学习。在这之前,你应该学习更多的Java基础。

希望这有助于:)

+0

那么你我基本上是一个新来者。感谢您的帮助! :d – Daniel