Por favor ajudem!

Estou tendo este problema com meu programa, o que pode estar acontecendo, ele começa a ler os dados e derrepente para, estou lendo de um arquivo DBF, eu tenho três arquivos DBF três ele lê direitinho no quarto ele começa a ler e depois dá este erro!!

Exception in thread “main” java.lang.NullPointerException
at com.hxtt.sql.HxttResultSet.isAfterLast(Unknown Source)
at com.hxtt.sql.HxttResultSet.a(Unknown Source)
at com.hxtt.sql.HxttResultSet.next(Unknown Source)
at produto.main(produto.java:73)

Eis o meu código, quando chega no quarto while ele dá o erro o while 1,2 e 3 lê numa boa!!

import java.sql.*;
import java.io.*;
import java.math.*;
import com.hxtt.sql.*;

public class produto
{
    public static void main(String args[]) throws Exception {
      	//String de conexão para o DB2
    	String url1 = "jdbc:db2:mktcomnt";
    	String username  = "mktcom";
	String password = "extend001";
	String codproduto = null,dscproduto = null,codfamilia = null,dscfamilia = null;
	String codlinha = null,dsclinha = null,codempresas = null,dscempresas = null;
        String query = null, qrynivel = null;
	
    	String path = "K:\PILOT\DDD\DDD_DADOS\";
    
	//Cria a string de conexão e tenta conectar no banco IBM DB2
    	Class.forName("COM.ibm.db2.jdbc.app.DB2Driver");
    	Connection con = DriverManager.getConnection(url1, username, password);
        PreparedStatement pstmt = con.prepareStatement("Select * from ddd_tab_un");
        System.out.println("CONEXAO EFETUADA COM SUCESSO MKTCOMNT, AGUARDE !!!");
        
	 //DBF
    	String conexao = "com.hxtt.sql.dbf.DBFDriver";
	Class.forName(conexao).newInstance();
	String url = "jdbc:DBF:/"+path;
	String sql1 = "SELECT * FROM PROD_EMP";
	String sql2 = "SELECT * FROM PROD_LIN";
	String sql3 = "SELECT * FROM PROD_FAM";
	String sql4 = "SELECT * FROM PROD_PRO";
	Connection conn = DriverManager.getConnection(url);
	System.out.println("CONEXAO EFETUADA COM SUCESSO NO ARQUIVO!!!");
 	Statement stmt = conn.createStatement();
	ResultSet rs1 = stmt.executeQuery(sql1); 
	while(rs1.next()) 
		{
		codempresas = rs1.getString("ID_EMPRESA").trim();
		dscempresas = rs1.getString("DSC_EMPRES").trim();
		System.out.println(codempresas +" - "+ dscempresas);
		}//while rs1
	rs1.close();	
	ResultSet rs2 = stmt.executeQuery(sql2); 	 
	while(rs2.next()) 
		{
		codlinha = rs2.getString("COD_LINHA").trim();
		dsclinha = rs2.getString("DSC_LINHA").trim();
		codempresas = rs2.getString("ID_EMPRESA").trim();
		System.out.println(codempresas +" - "+ dscempresas +" - "+ codempresas);
		}//while rs2
	rs2.close();
	ResultSet rs3 = stmt.executeQuery(sql3); 	 
	while(rs3.next()) 
		{
		codfamilia = rs3.getString("ID_FAMILIA").trim();
		dscfamilia = rs3.getString("FAMILIA").trim();
		codlinha = rs3.getString("COD_LINHA").trim();
		System.out.println(codfamilia +" - "+ dscfamilia +" - "+ codlinha);
		}//while rs3
	rs3.close();
	ResultSet rs4 = stmt.executeQuery(sql4);
	while(rs4.next()) 
		{
		codproduto = rs4.getString("ID_PRODUTO");
		dscproduto = rs4.getString("PRODUTO");
		codfamilia = rs4.getString("ID_FAMILIA");
		System.out.println(codproduto +" - "+ dscproduto +" - "+ codfamilia);
		System.out.println(codproduto);
		}//while rs4
	rs4.close();
       	conn.close();
	pstmt.close();	
	con.close();
	}//public
}//public

Cara, uma boa forma de se achar erros causados por um null é colocar uns prints dentro do seu codigo, dessa forma vc achara rapidamente qual objeto esta nulo!!! e o corrigira facilmente!!!

codempresas = rs1.getString("ID_EMPRESA").trim(); 
dscempresas = rs1.getString("DSC_EMPRES").trim(); 

se 1 desses 2 campos forem “null” o que aconteceu ?
da PAU, pois a funcao trim() nao vai existir!!

faz assim:

codempresas = rs1.getString("ID_EMPRESA"); 
if (codempresas != null) codempresas = codempresas.trim();
....

ou assim:

codempresas = ( (rs1.getString("ID_EMPRESA") != null ) ? rs1.getString("ID_EMPRESA").trim() : null); //voce pode trocar null por vazio "", se preferir
....