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.