Estou fazendo um progrma que monitora linhas VOIP.
Ao receber um Dial Event (um ramal receber chamada), o usuário recebe as devidas informações sobre quem está ligando.
as informações são recebidas de uma vez só e separadas por vígula, para mostrar apenas o necessáio fiz um método que irei mostrar,
até aí tudo certo, o problema é que ao receber uma segunda chamada de um mesmo ramal, as informações não são mostradas na tela,
bem como não são salvas no relatório de chamadas e o erro “java.lang.NullPointerException” é acusado na linha apontada no código abaixo:
while (cont <= arrayDE.length) {
for (int i = 0; i < evento.length(); i++) { //INÍCIO quebra de linha quando encontra uma vírgula
if (evento.charAt(i) != ',') { //grava letra por letra, até achar uma vírgula
partes += evento.charAt(i);
} else { //quando acha a vírgula armazena todo o conteúdo anterior no vetor, na posição cont
arrayDE[cont] = partes; //<<<<< O ERRO ESTÁ AQUI
System.out.println(cont);
cont++;
partes = ""; //String partes é zerada
}
}//final quebra de linha
}
arrayDE é um array String de 10 casas, mas por via das dúvias, caso eu não tenha sido claro o suficiente, aqui a classe inteira:
package DialEvent;
import java.io.IOException;
import javax.swing.JOptionPane;
import org.asteriskjava.manager.ManagerConnection;
import org.asteriskjava.manager.ManagerConnectionFactory;
import org.asteriskjava.manager.ManagerEventListener;
import org.asteriskjava.manager.event.DialEvent;
import org.asteriskjava.manager.event.ManagerEvent;
public class EventListener2 extends Thread implements ManagerEventListener {
//início declaração de variáveis da classe
String codigo_area_telefone = "";
String primeira_parte_telefone = "";
String segunda_parte_telefone = "";
String telefone_inteiro = "";
String numero_sem_aspas = "";
int cont = 0;
private String arrayDE[] = new String[9];
private ManagerConnection managerConnection;
private boolean torun;
private String channel;
DataHora dt = new DataHora();
CriaTxt ct = new CriaTxt();
//final declaração de variáveis da classe
public EventListener2(String host, String username, String password,
String channel) throws IOException {
this.channel = channel;
ManagerConnectionFactory factory = new ManagerConnectionFactory(
host, username, password);
this.managerConnection = factory.createManagerConnection();
}
public void run() {
this.torun = true;
// register for events
managerConnection.addEventListener(this);
try {
// connect to Asterisk and log in
managerConnection.login();
} catch (Exception ex) {
// Do nothing
}
try {
// wait 10 seconds for events to come in
while (this.torun) {
Thread.sleep(100);
}
} catch (Exception ex) {
// Do nothing
}
// and finally log off and disconnect
managerConnection.logoff();
}
public void stopListener() {
this.torun = false;
}
public void onManagerEvent(ManagerEvent event) {
if (event instanceof DialEvent) {
if (DialEvent.class.cast(event).getDestination().contains(this.channel)) {
String partes = "";
String evento = event.toString();
while (cont <= arrayDE.length) {
for (int i = 0; i < evento.length(); i++) { //INÍCIO quebra de linha quando encontra uma vírgula
if (evento.charAt(i) != ',') { //grava letra por letra, até achar uma vírgula
partes += evento.charAt(i);
} else { //quando acha a vírgula armazena todo o conteúdo anterior no vetor, na posição cont
arrayDE[cont] = partes; //<<<<< O ERRO ESTÁ AQUI
System.out.println(cont);
cont++;
partes = ""; //String partes é zerada
}
}//final quebra de linha
}
//início retira os caracteres desnecessários
arrayDE[4] = arrayDE[4].substring(13);
//início define como "desconhecido", caso o nome não esteja cadastrado
if (arrayDE[4].equals("'<unknown>'")) {
arrayDE[4] = "Desconhecido";
}//final define como "desconhecido", caso o nome não esteja cadastrado
arrayDE[5] = arrayDE[5].substring(9);//retira caracteres desnecessários
//início - retirar aspas
for (int i = 0; i < arrayDE[5].length(); i++) {
if (arrayDE[5].charAt(i) != '') {
partes += arrayDE[5].charAt(i);
} else {
numero_sem_aspas = partes;
cont++;
partes = ""; //String partes é zerada
}
}//final - retirar aspas
//início - tratar o número caso não seja um ramal
if (numero_sem_aspas.length() >= 8) {
codigo_area_telefone = numero_sem_aspas.substring(numero_sem_aspas.length() - numero_sem_aspas.length(), numero_sem_aspas.length() - 8);
primeira_parte_telefone = numero_sem_aspas.substring(numero_sem_aspas.length() - 8, numero_sem_aspas.length() - 4);
segunda_parte_telefone = numero_sem_aspas.substring(numero_sem_aspas.length() - 4, numero_sem_aspas.length());
telefone_inteiro = "Número: " + codigo_area_telefone + " " + primeira_parte_telefone + "-" + segunda_parte_telefone;
} //final - tratar o número caso não seja um ramal
else {
for (int i = 0; i < arrayDE[5].length(); i++) { //INÍCIO quebra de linha quando encontra uma vírgula
if (arrayDE[5].charAt(i) != '') { //retira o caracter '
partes += arrayDE[5].charAt(i);
} else {
numero_sem_aspas = partes;
cont++;
partes = ""; //String partes é zerada
}
}//final quebra de linha
telefone_inteiro = "Ramal: " + numero_sem_aspas;
}
arrayDE[7] = arrayDE[7].substring(5);
arrayDE[8] = arrayDE[8].substring(13);
//final
//início imprime
JOptionPane.showMessageDialog(null, dt.Datahora() + "\n" + "\n" +
"Nome: " + arrayDE[4] + "\n" +
telefone_inteiro); //arrayDE[5]
//final imprime
//início grava os arquivos em txt
ct.Gravar(dt.Datahora() + "; " +
arrayDE[4] + "; " +
telefone_inteiro + "; " +//arrayDE[5]
arrayDE[7] + "; " +
arrayDE[8]);
//final grava os arquivos em txt
for (int i = 0; i >= arrayDE.length; i++) {
arrayDE[i] = "";
}
}
}
}
public String[] getArrayDE() {
this.arrayDE[cont] = arrayDE[cont];
return arrayDE;
}
public void setArrayDE(String[] arrayDE) {
this.arrayDE = arrayDE;
}
}


