Ir para conteúdo
  • Cadastre-se

dev botao

Erro ao implementar ACBrIBGE


Willian Resplandes
  • Este tópico foi criado há 2620 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Bom dia amigos estou com problemas na implementação do ACBrIBGE quando eu busco o municio por código ou nome vai tudo bem, mas quando tenho pegar o objeto da lista de municípios da o erro abaixo.

 

/*
 * 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 jACBrFramework.ibge;

import com.sun.jna.ptr.IntByReference;
import jACBrFramework.ACBrClass;
import jACBrFramework.ACBrEventListener;
import jACBrFramework.ACBrException;
import jACBrFramework.interop.ACBrIBGEInterop;
import jACBrFramework.interop.ACBrIBGEInterop.CidadeRec;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;


public class ACBrIBGE extends ACBrClass {

    private ACBrIBGECidade[] cidades;


    public ACBrIBGE() throws ACBrException {

    }

    /**
     * Cria um novo objeto com base no charset recebido.
     *
     * @param pCharset charset utilizado na conversao para geracao do sintegra.
     */
    public ACBrIBGE(Charset pCharset) throws ACBrException {
        this();
        setCustomCharset(pCharset);
    }

    public void BuscarPorCodigo(int codigo) throws ACBrException {
        cidades = null;
        int ret = ACBrIBGEInterop.INSTANCE.IBGE_BuscarPorCodigo(getHandle(), codigo);
        checkResult(ret);
    }

    public void BuscarPorNome(String nome, String uf, Boolean exata) throws ACBrException {
        cidades = null;
        int ret = ACBrIBGEInterop.INSTANCE.IBGE_BuscarPorNome(getHandle(), nome, uf, exata);
        checkResult(ret);
    }

    private void CarregaCidades() throws ACBrException {
        int count = ACBrIBGEInterop.INSTANCE.IBGE_Cidades_GetCount(getHandle());
        checkResult(count);
        cidades = new ACBrIBGECidade[count];
        for (int i = 0; i < count; i++) {
            CidadeRec cidadeRec = new ACBrIBGEInterop.CidadeRec();
            int ret = ACBrIBGEInterop.INSTANCE.IBGE_Cidades_GetItem(getHandle(), cidadeRec,i);
            checkResult(ret);

            ACBrIBGECidade cidade = new ACBrIBGECidade();
            
            cidade.setMunicipio(fromUTF8(cidadeRec.Municipio));
            cidade.setCodMunicio(cidadeRec.CodMunicio);
            cidade.setUF(fromUTF8(cidadeRec.UF));
            cidade.setCodUF(cidadeRec.CodUF);
            cidade.setArea(cidadeRec.Area);
            cidades[i] = cidade;

        }
    }

    @Override
    protected void onInitialize() throws ACBrException {
        IntByReference handle = new IntByReference();
        int ret = ACBrIBGEInterop.INSTANCE.IBGE_Create(handle);
        checkResult(ret);
        setHandle(handle.getValue());
    }

    /**
     * Finaliza a comunicacao com a acbr.
     *
     * @throws ACBrException excecao acionada ao finalizar a comunicacao.
     */
    @Override
    protected void onFinalize() throws ACBrException {
        if (getHandle() != 0) {
            int ret = ACBrIBGEInterop.INSTANCE.IBGE_Destroy(getHandle());
            checkResult(ret);
            setHandle(0);
        }
    }

    public void addOnBuscaEfetuada(ACBrEventListener<BuscaEfetuadaEventObject> pListener) {
        if (!hasListeners("onBuscaEfetuada")) {
            ACBrIBGEInterop.INSTANCE.IBGE_SetOnBuscaEfetuada(getHandle(), new ACBrIBGEInterop.OnBuscaEfetuadaCallback() {
                @Override
                public void invoke() {
                    onBuscaEfetuada();
                }
            });
        }

        //addListener("onLePeso", pListener);
    }

    /**
     * Remove o listener associado.
     *
     * @param pListener
     */
    public void removeOnBuscaEfetuada(ACBrEventListener<BuscaEfetuadaEventObject> pListener) {
        removeListener("onBuscaEfetuada", pListener);
        if (!hasListeners("onBuscaEfetuada")) {
            ACBrIBGEInterop.INSTANCE.IBGE_SetOnBuscaEfetuada(getHandle(), null);
        }
    }

    /**
     * Leitura o codigo de barras.
     *
     * @return
     */
    public void onBuscaEfetuada() {
        BuscaEfetuadaEventObject e = new BuscaEfetuadaEventObject(this);
        notifyListeners("onBuscaEfetuada", e);
    }

    @Override
    public void checkResult(int pResult) throws ACBrException {
        switch (pResult) {
            case -1: {
                String lMessage;
                final int LEN = 1024;
                ByteBuffer buffer = ByteBuffer.allocate(LEN);
                int ret = ACBrIBGEInterop.INSTANCE.IBGE_GetUltimoErro(getHandle(), buffer, LEN);
                lMessage = fromUTF8(buffer, ret);
                throw new ACBrException(lMessage);
            }
            case -2: {
                throw new ACBrException("ACBr IBGE não inicializado.");
            }
        }
    }

    public ACBrIBGECidade[] getCidades() {
        if (cidades == null) {
            try {
                CarregaCidades();
            } catch (ACBrException ex) {
                ex.printStackTrace();
            }
        }
        return cidades;
    }

    public void setCidades(ACBrIBGECidade[] cidades) {
        this.cidades = cidades;
    }

}
package jACBrFramework.ibge;

import java.util.EventObject;

/**
 * Evento acionado para leitura de dados.
 * 
 * @author Jose Mauro
 * @version Criado em: 26/05/2014 16:16:58, revisao: $Id: LeCodigoEventObject.java 6912 2014-05-26 20:07:28Z jmsandy $
 */
public class BuscaEfetuadaEventObject extends EventObject {
    
    // <editor-fold defaultstate="collapsed" desc="Constants">
    private static final long serialVersionUID = -982939358125089587L;
    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="Attributes">
    // </editor-fold>
    //<editor-fold defaultstate="collapsed" desc="Constructor">
    public BuscaEfetuadaEventObject(Object pSource) {
        super(pSource);
    }
    // </editor-fold>
    // <editor-fold defaultstate="collapsed" desc="Getters - Setters">
    // </editor-fold>
 
}
package jACBrFramework.Test;

import jACBrFramework.ibge.ACBrIBGE;
import jACBrFramework.ibge.ACBrIBGECidade;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Testes basicos para ACBrIBGE.
 *
 * @author Willian Resplandes Matias
 * @version Criado em: 24/01/2017 
 */
public class ProgramTestIBGE {

    public static void main(String[] args) {
        try {
            final ACBrIBGE ibge = new ACBrIBGE();
            ibge.BuscarPorCodigo(5106422);
            ACBrIBGECidade[] cidades = ibge.getCidades();
            System.out.println(cidades[0].getMunicipio());


        } catch (Exception ex) {
            Logger.getLogger(ProgramTestAac.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}

 

run:
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x1608cbc1, pid=4648, tid=0x00000544
#
# JRE version: Java(TM) SE Runtime Environment (8.0_101-b13) (build 1.8.0_101-b13)
# Java VM: Java HotSpot(TM) Client VM (25.101-b13 mixed mode, sharing windows-x86 )
# Problematic frame:
# C  [ACBrFramework32.dll+0x7cbc1]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# An error report file with more information is saved as:
# C:\ACBrFramework\jACBrFramework\jACBrFramework\hs_err_pid4648.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Java Result: 1
BUILD SUCCESSFUL (total time: 4 seconds)

Willian Resplandes Matias

Skype: willian.matias.frialto

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 2620 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...