“线程中的异常”;螺纹-4“;java.lang.NullPointerException
我非常感谢您对我的计划的帮助“线程中的异常”;螺纹-4“;java.lang.NullPointerException,java,nullpointerexception,Java,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
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行。您的对象正在使用第一个构造函数初始化,该构造函数不带参数。因此,
skt
从未初始化,因此null
。调用skt.getOutputStream()
时,它会抛出一个空指针异常,因为它无法取消对skt
的引用
ServerConnect(){}
ServerConnect(Socket connection, String sProcessNo) {
this.skt = connection;
this.sProcessId = sProcessNo;
}
你用什么构造函数?原因skt可能未初始化
//编辑:哦,我知道你用错了构造函数
ServerConnect scnt = new ServerConnect();
到
ServerConnect scnt = new ServerConnect(skt,sProcessId);