Ajuda com erro

Galera estou desenvolvendo um sistema para o trabalho, estou com um erro de NullPointerException e não consigo identificar o porque, já fiz vários debugs e não vejo sentido. Veja se alguém consegue me ajudar.

PisCofins.class:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gvs.piscofins;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import jxl.CellType;
import jxl.NumberCell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;

/**
 *
 * @author Gabriel Vargas Santana
 */
public class PisCofins {

    private static ArrayList<Xml> xmls = new ArrayList<Xml>();
    private static ArrayList<Sistema> sistemas = new ArrayList<Sistema>();
    private static ArrayList<ProdutoDivergente> produtosDivergentes = new ArrayList<>();

    public static void depareXmlApollo() {
        ArrayList<Xml> xmlsSobraram = new ArrayList<>();
        ArrayList<Sistema> sistemaSobraram = new ArrayList<>();

        for (Xml xml : xmls) {
            Sistema sis = getSistemaByNF(xml.getNf());
            if (sis == null) {
                sistemaSobraram.add(sis);
            }
        }

        for (Sistema sist : sistemas) {
            Xml x = getXmlByNF(sist.getNf());
            if (x == null) {
                xmlsSobraram.add(x);
            }
        }

        xmls.removeAll(xmlsSobraram);
        sistemas.removeAll(sistemaSobraram);

        for (Xml xml : xmls) {
            Sistema sist = getSistemaByNF(xml.getNf());

            for (Produto prd : xml.getProdutos()) {
                Produto pEquivalente = getProdutoByOrdem(sist.getProdutos(), prd.getOrdemProduto());

                if (pEquivalente != null) {
                    ArrayList<Erros> erros = new ArrayList<>();

                    if (prd.getBaseCOFINS() != pEquivalente.getBaseCOFINS()) {
                        erros.add(Erros.BASE_COFINS);
                    }

                    if (prd.getBasePIS() != pEquivalente.getBasePIS()) {
                        erros.add(Erros.BASE_PIS);
                    }

                    if (prd.getValorPIS() != pEquivalente.getValorPIS()) {
                        erros.add(Erros.VALOR_PIS);
                    }

                    if (prd.getValorCOFINS() != pEquivalente.getValorCOFINS()) {
                        erros.add(Erros.VALOR_COFINS);
                    }

                    if (!erros.isEmpty()) {
                        ProdutoDivergente pd = new ProdutoDivergente(prd, erros);
                        produtosDivergentes.add(pd);
                        System.out.println(prd.getNf());
                    }

                } else {
                    ArrayList<Erros> ersss = new ArrayList<>();
                    ersss.add(Erros.OUTROS);
                    ProdutoDivergente pd2 = new ProdutoDivergente(prd, ersss);
                    produtosDivergentes.add(pd2);
                }

            }

        }

    }

    public static Produto getProdutoByOrdem(ArrayList<Produto> prods, int ordem) {
        for (Produto p : prods) {
            if (p.getOrdemProduto() == ordem) {
                return p;
            }
        }
        return null;
    }

    //LEMBRAR DE VERIFICAR SE É NULL OU NÃO QUANDO USAR ESSE MÉTODO
    public static Xml getXmlByNF(String nota) {
        for (Xml x : xmls) {
            if (x.getNf().equalsIgnoreCase(nota)) {
                return x;
            }
        }
        return null;
    }

    public static Sistema getSistemaByNF(String nota) {
        for (Sistema s : sistemas) {
            if (s.getNf().equalsIgnoreCase(nota)) {
                return s;
            }
        }
        return null;
    }

    public static boolean loadApollo(File apollo) {
        try {
            FileReader arq = new FileReader(apollo);
            BufferedReader lerArq = new BufferedReader(arq);

            //VARIAVEL DA LINHA DO ARQUIVO QUE ELE ESTÁ LENDO
            String linha = lerArq.readLine(); // lê a primeira linha
            //VARIAVEL PARA SABER O NUMERO DA LINHA
            int linhas = 0;

            Sistema sistema = new Sistema();

            //LÊ LINHA POR LINHA DO ARQUIVO
            while (linha != null) {
                if (linhas > 0) {
                    String[] linhaFinal = linha.split(";");
                    String nota = linhaFinal[0];

                    if (hasSistema(nota)) {
                        sistema = getSistemaByNF(nota);
                    } else {
                        sistema = new Sistema(nota, new ArrayList<>());
                        sistemas.add(sistema);
                    }

                    int ordemItem = Integer.parseInt(linhaFinal[1]);
                    double basePIS = Double.parseDouble(linhaFinal[5].replace(".", "").replace(",", "."));
                    double baseCOFINS = Double.parseDouble(linhaFinal[6].replace(".", "").replace(",", "."));
                    String ncm = linhaFinal[4];
                    double valorPIS = Double.parseDouble(linhaFinal[9].replace(".", "").replace(",", "."));
                    double valorCOFINS = Double.parseDouble(linhaFinal[10].replace(".", "").replace(",", "."));

                    Produto produto = new Produto(basePIS, baseCOFINS, ncm, valorPIS, valorCOFINS, ordemItem, nota);
                    getSistemaByNF(nota).getProdutos().add(produto);

                }
                linha = lerArq.readLine(); //lê a prox linha
                linhas++;
            }
            for (Sistema ss : sistemas) {
                System.out.println("Sis: " + ss.getNf() + " Qnts produtos: " + ss.getProdutos().size());
            }
            return true;
        } catch (IOException | NumberFormatException e) {
            return false;
        }

    }

    public static boolean hasSistema(String nf) {
        for (Sistema s : sistemas) {
            if (s.getNf().equalsIgnoreCase(nf)) {
                return true;
            }
        }
        return false;
    }

    public static boolean hasXml(String nf) {
        for (Xml x : xmls) {
            if (x.getNf().equalsIgnoreCase(nf)) {
                return true;
            }
        }
        return false;
    }

    public static boolean loadXML(File planilha) {
        try {
            Workbook wb = Workbook.getWorkbook(planilha);
            Sheet st = wb.getSheet(0);
            int numlinha = st.getRows();
            int numcol = st.getColumns();

            Xml xml = new Xml();
            for (int linha1 = 1; linha1 < numlinha; ++linha1) {
                String nota = st.getCell(0, linha1).getContents();

                if (hasXml(nota)) {
                    xml = getXmlByNF(nota);
                } else {
                    xml = new Xml(nota, new ArrayList<>());
                    xmls.add(xml);
                }

                //BASE DO PIS ESTÁ NA COLUNA F
                double basePIS = st.getCell(5, linha1).getType() != CellType.EMPTY ? (((NumberCell) st.getCell(5, linha1)).getValue()) : 0.0;
                //BASE DO COFINS ESTÁ NA COLUNA I
                double baseCOFINS = st.getCell(5, linha1).getType() != CellType.EMPTY ? (((NumberCell) st.getCell(8, linha1)).getValue()) : 0.0;
                //O NCM ESTÁ NA COLUNA E
                String ncm = (st.getCell(0, linha1).getType() != CellType.EMPTY) ? st.getCell(4, linha1).getContents() : "0";
                //O VALOR DO PIS ESTÁ NA COLUNA F
                double valorPIS = st.getCell(5, linha1).getType() != CellType.EMPTY ? (((NumberCell) st.getCell(7, linha1)).getValue()) : 0.0;
                //O VALOR DO COFINS ESTÁ NA COLUNA I
                double valorCOFINS = st.getCell(5, linha1).getType() != CellType.EMPTY ? (((NumberCell) st.getCell(10, linha1)).getValue()) : 0.0;
                //A ORDEM DO PRODUTO ESTÁ NA BOLUNA C
                int ordemProduto = (int) (st.getCell(5, linha1).getType() != CellType.EMPTY ? (((NumberCell) st.getCell(2, linha1)).getValue()) : 0.0);
                //O NÚMERO DA NF ESTÁ NA COLUNA A
                String nf = (st.getCell(0, linha1).getType() != CellType.EMPTY) ? st.getCell(0, linha1).getContents() : "0";

                //PRODUTO
                Produto produto = new Produto(basePIS, baseCOFINS, ncm, valorPIS, valorCOFINS, ordemProduto, nf);
                getXmlByNF(nota).getProdutos().add(produto);

            }
            for (Xml ss : xmls) {
                System.out.println("Xmls: " + ss.getNf() + " Qnts produtos: " + ss.getProdutos().size());
            }
            return true;
        } catch (IOException | IndexOutOfBoundsException | BiffException e) {
            return false;
        }
    }

}

Produto.class:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gvs.piscofins;

/**
 *
 * @author contabil.04
 */
public class Produto {
    
    private double basePIS;
    private double baseCOFINS;
    private String ncm;
    private double valorPIS;
    private double valorCOFINS;
    private int ordemProduto;
    private String nf;
    
   
    
    public Produto(double baseP, double baseC, String n, double vPis, double vCofins, int ordemP, String nota){
        this.basePIS = baseP;
        this.baseCOFINS = baseC;
        this.ncm = n;
        this.valorPIS = vPis;
        this.valorCOFINS = vCofins;
        this.ordemProduto = ordemP;
        this.nf = nota;
    }

    public String getNf() {
        return nf;
    }

    public void setNf(String nf) {
        this.nf = nf;
    }
    
    

    public double getBasePIS() {
        return basePIS;
    }

    public void setBasePIS(double basePIS) {
        this.basePIS = basePIS;
    }

    public double getBaseCOFINS() {
        return baseCOFINS;
    }

    public void setBaseCOFINS(double baseCOFINS) {
        this.baseCOFINS = baseCOFINS;
    }

    public String getNcm() {
        return ncm;
    }

    public void setNcm(String ncm) {
        this.ncm = ncm;
    }

    public double getValorPIS() {
        return valorPIS;
    }

    public void setValorPIS(double valorPIS) {
        this.valorPIS = valorPIS;
    }

    public double getValorCOFINS() {
        return valorCOFINS;
    }

    public void setValorCOFINS(double valorCOFINS) {
        this.valorCOFINS = valorCOFINS;
    }

    public int getOrdemProduto() {
        return ordemProduto;
    }

    public void setOrdemProduto(int ordemProduto) {
        this.ordemProduto = ordemProduto;
    }
    
    
    
}

Sistema.class:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package br.com.gvs.piscofins;

import java.util.ArrayList;

/**
 *
 * @author contabil.04
 */
public class Sistema {
    
    private String nf;
    private ArrayList<Produto> produtos;
    
    public Sistema(){
        
    }
    
    public Sistema(String nota, ArrayList<Produto> itens){
        this.nf = nota;
        this.produtos = itens;
    }

    public String getNf() {
        return nf;
    }

    public void setNf(String nf) {
        this.nf = nf;
    }

    public ArrayList<Produto> getProdutos() {
        return produtos;
    }

    public void setProdutos(ArrayList<Produto> produtos) {
        this.produtos = produtos;
    }
    
    
    
}

ERRO:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at br.com.gvs.piscofins.PisCofins.getSistemaByNF(PisCofins.java:115)
	at br.com.gvs.piscofins.PisCofins.depareXmlApollo(PisCofins.java:36)
	at br.com.gvs.piscofins.Main.jButton1MouseClicked(Main.java:276)
	at br.com.gvs.piscofins.Main.access$400(Main.java:15)
	at br.com.gvs.piscofins.Main$5.mouseClicked(Main.java:114)
	at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
	at java.awt.Component.processMouseEvent(Component.java:6536)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6298)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
	at java.awt.Container.dispatchEventImpl(Container.java:2280)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

A linha que o erro aponta:
if (s.getNf().equalsIgnoreCase(nota)) {

Fiz vários debugs e aparamente os ArrayList não estão nulos, e eu consigo puxar normalmente alguns valores do Array.

Consegui resolver o problema…agora está dando NPE nessa linha:
Produto pEquivalente = getProdutoByOrdem(sist.getProdutos(), prd.getOrdemProduto());

Alguem me ajuda a entender pf kkkk to quebrando a cabeça

Refiz a parada toda e deu certo!

1 curtida