2010-02-27 100 views
2

我真的很感激一些帮助,我的计划异常在线程 “线程4” 显示java.lang.NullPointerException

Exception in thread "Thread-4" java.lang.NullPointerException 
    at ServerConnect.replyChoice(BaseStaInstance.java:63) 
    at ServerConnect.run(BaseStaInstance.java:45) 
    at java.lang.Thread.run(Thread.java:619) 

我ServerConnect函数看起来像: -

class ServerConnect extends Thread { 

Socket skt; 
String sProcessId; 
ServerConnect scnt = null; 
ObjectOutputStream myOutput; 
ObjectInputStream myInput; 


ServerConnect(){} 
ServerConnect(Socket connection, String sProcessNo) { 
    this.skt = connection; 
    this.sProcessId = sProcessNo; 
} 

public void run() { 
    try { 
    myInput = new ObjectInputStream(skt.getInputStream()); 
    ServerConnect scnt = new ServerConnect(); 

    while(true) { 
    try{ 
    int ownTimeStamp = Global.iTimeStamp; 

    Object buf = myInput.readObject(); 

    //if we got input, print it out and write a message back to the remote client... 
    if(buf != null){ 
LINE 45-->  **scnt.replyChoice(buf);** 

    } 

    }catch(ClassNotFoundException e) { 
    e.printStackTrace(); 
    } 
    } 
    } catch(IOException e) { 
    e.printStackTrace(); 
    } 
} 

void replyChoice(Object buf){ 


    try{ 
LINE 63 --> **myOutput = new ObjectOutputStream(skt.getOutputStream());** 


    System.out.println("Server read:[ "+buf+" ]"); 
    myOutput.writeObject("got it"); 
    myOutput.flush(); 

    }catch(IOException e){ 
    e.printStackTrace(); 
    } 
} 
} 

它基本上是一个套接字编程和多线程应用程序。在不同的终端上执行它以使客户端和服务器建立连接,我执行我的代码。但它在两个终端上抛出上面的错误。它只是与我在错误的地方声明myOutput变量有关。有人能帮助我吗? 从错误消息中,我突出显示了所附代码段中的第63行和第45行。

回答

2

您的对象正在使用第一个构造函数进行初始化,该构造函数不带任何参数。因此,skt从不初始化,因此null。当您调用skt.getOutputStream()时,它会抛出空指针异常,因为它无法取消引用skt

+0

thk u for ur help – 2010-02-27 17:27:55

0
ServerConnect(){} 
ServerConnect(Socket connection, String sProcessNo) { 
    this.skt = connection; 
    this.sProcessId = sProcessNo; 
} 

你用什么构造函数? SKT的原因可能是未初始化

//编辑:哦,我现在看你使用了错误的构造

ServerConnect scnt = new ServerConnect(); 

ServerConnect scnt = new ServerConnect(skt,sProcessId); 
+0

thk u for ur help – 2010-02-27 17:49:50

4
  1. 删除默认的构造函数
  2. 让您的实例字段(stk和sProrcessId)final
  3. 看你的编译器如何抱怨和修复tho se问题

这些指示可帮助您交易运行时错误(如NPE)以编译时间错误,这是您可以做的最好的事情。注意:这个绝招是为了一般的使用。

+0

thk u for ur help – 2010-02-27 17:28:58

相关问题