下面的代码是一个ATM服务器端的代码,想要与数据库连接并能与客户端通信,但是下面程序运行的时候老是在out.writeUTF(Smessage);  new Communicate("用户名或密码错误!\n请重新输入!"); 
new Connect(inMsage); 处出现空指针错误,找了半天找不出原因,估计其他地方也有错误,刚开始学java对这些错误有些不知所措,请各位帮忙看一下是什么问题,谢谢!!import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.sql.*;public class csServerATM {
@SuppressWarnings("resource")
public static void main(String[] args){
ServerSocket server=null;
//Communicate thread;
Socket visitor=null;

while(true){
try{
   server=new ServerSocket(4422);
   
   //System.out.println("linked successfully");
   }
   catch(IOException e){System.out.println(""+e);break;}
try{  visitor=server.accept();  }
catch(IOException e1){System.out.println(""+e1);break;}
if(visitor!=null){
new Communicate(visitor).start();
}
else continue;
}

 }
}class Communicate extends Thread{
   Socket cSocket;
   ServerSocket server;
   DataInputStream in;
   DataOutputStream out;
   String Smessage="";
   Communicate(String mes){
   
   while(true){
    Smessage=mes;
   try{
   out.writeUTF(Smessage);
   }
   catch(IOException e1){System.out.println(""+e1);break;}
   }}
   
   Communicate(Socket t) {
   try{
   cSocket=t;
   in=new DataInputStream(cSocket.getInputStream());
   out=new DataOutputStream(cSocket.getOutputStream());  
   //out.writeUTF("successfully");
  System.out.println("连接成功!");
   }catch(IOException e){System.out.println("无法连接"+e);} 
   
   }
   public void run(){
   String  inMsage="";
   while(true){
   
   try{
   inMsage=in.readUTF();  
           //System.out.println(inMsage);
  new Connect(inMsage);
   }
   catch(IOException e){System.out.println(""+e);break;}
   }
 
}
   public void SendMessage(String mes){
   
   }
}class Connect {
Connection dbCon;
ResultSet rs;
Statement sql;

Connect(String message){
String msage=message;
//System.out.println("shujuku"+msage);
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
}
catch(ClassNotFoundException e){System.out.println("驱动失败!");}
try{
dbCon=DriverManager.getConnection("jdbc:odbc:bankAccount","","");
System.out.println("数据库连接成功");

if(msage.substring(0, 5).equals("query")){
if(msage.length()==14){
String accountNu=msage.substring(5,14);
String psw=msage.substring(14,msage.length());
sql=dbCon.createStatement();
rs=sql.executeQuery("SELECT accountNUMBER FROM account WHERE accountNumber='"+accountNu+"'AND password='"+psw+"'");
String amount=rs.getString(1);
if(amount!=null){
new Communicate(amount);
}}
else{
new Communicate("用户名或密码错误!\n请重新输入!");
}

}
}catch(SQLException e){System.out.println("数据库连接lost");}
finally {try {
dbCon.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}

   }
}

解决方案 »

  1.   

    rs=sql.executeQuery("SELECT accountNUMBER FROM account WHERE accountNumber='"+accountNu+"'AND password='"+psw+"'");//AND前面少个空格
    改为:
    rs=sql.executeQuery("SELECT accountNUMBER FROM account WHERE accountNumber='"+accountNu+"' AND password='"+psw+"'");
      

  2.   


    不是这个原因, 我用了另外的方法,将socket与connect放在一个类中就没有这个问题了,可是我还是不知道将这些方法分别放在不同类中如何实现, 老是出现空指针错误。 谢谢你的回答。