Como corrigir o erro!

4 respostas
R

Boa tarde, galera!

tenho uma aplicação de cadastro de clientes e quando faço cadastro tudo ocorre bem, mas quando quero listar apresenta erro, me ajudem a corrigir esse erro.
grato.

package principal;

import conexao.GetPostRegistros;
import javax.microedition.midlet.*;  
import javax.microedition.lcdui.*;  

import java.util.Vector;
import javax.microedition.rms.*;

import rms.RmsVenda;

public class VendaRemota extends MIDlet implements CommandListener, Runnable {  
   	private Display display;  
   	private List telaInicial, telaClientes, telaProdutos, telaPedidos;
   	private Alert alerta;
   	private Command sair, sobre, voltar, salvar, novo, apagar;  
   	private Form adicionarCliente, adicionarProduto, adicionarPedido, telaInformacoes;
   	private TextField tfCliente,tfEndereco,tfTelefone,tfSenha,tfLogin,tfEmail,tfCodigo, tfProduto, tfQuantidade,tfTam, tfPreco;
   	private Vector vecClientes, vecProdutos, vecPedidos = null;
   	boolean deletedFlags[] = null;
   	private ChoiceGroup clientesCG, produtosCG;
   	boolean gravacaoOK = false; 
   
	//RMS   
   	private RmsVenda rmsPedidos, rmsClientes, rmsProdutos;
   	private RecordStore RSPedidos, RSClientes, RSProdutos;
   	private String BDClientes = "BancoClientes";
   	private String BDPedidos = "BancoPedidos";
   	private String BDProdutos = "BancoProdutos";

	//Conexao com Servlet
   	private GetPostRegistros  conClientes;
  	private Thread t = null;
	
   	public VendaRemota(){  
       		display  = Display.getDisplay(this);  
       		sair = new Command("Sair", Command.EXIT, 0);
       		voltar = new Command ("Voltar", Command.BACK, 0);
       		salvar = new Command( "Salvar", Command.OK, 1);
       		apagar = new Command("Apagar", Command.OK, 1);
	   	novo = new Command("Novo", Command.OK, 1);
	   	sobre = new Command ("Sobre", Command.HELP,1);
	   
       		telaInicial = new List( "Pizzaria Pegaleve - Seja bem-vindo", Choice.IMPLICIT );
       		telaInicial.append("Clientes",null);
       		telaInicial.append("Produtos",null);
       		telaInicial.append("Pedidos",null);  
       		telaInicial.append("Transmitir dados",null);
       		telaInicial.append("Zerar Registros",null);
       		telaInicial.append("Estatísticas",null);
       		telaInicial.addCommand(sair);
       		telaInicial.addCommand(sobre);  
       		telaInicial.setCommandListener(this);       
          
       		telaClientes = new List("Cadastro de Clientes", Choice.MULTIPLE);        
       		telaClientes.addCommand(voltar);  
       		telaClientes.addCommand(novo);
       		telaClientes.addCommand(apagar);
       		telaClientes.setCommandListener(this);

       		telaProdutos = new List("Cadastro de Produtos", Choice.MULTIPLE);        
       		telaProdutos.addCommand(voltar);  
       		telaProdutos.addCommand(novo);
       		telaProdutos.addCommand(apagar);
       		telaProdutos.setCommandListener(this);

       		telaPedidos = new List("Cadastro de Pedidos", Choice.MULTIPLE);        
       		telaPedidos.addCommand(voltar);
       		telaPedidos.addCommand(novo);
       		telaPedidos.addCommand(apagar);
       		telaPedidos.setCommandListener(this);

       		adicionarCliente = new Form ("Adicione novo cliente");
       		tfCliente = new TextField ("Nome do Cliente","",20, TextField.ANY);
      		 adicionarCliente.append(tfCliente);
      		tfEndereco = new TextField ("Endereço","",20, TextField.ANY);
      		 adicionarCliente.append(tfEndereco);
      		tfTelefone = new TextField ("Telefone:","",9, TextField.ANY);
     		 adicionarCliente.append(tfTelefone);
     		tfSenha = new TextField ("Senha:","",16, TextField.PASSWORD);
     		 adicionarCliente.append(tfSenha);
     		tfLogin = new TextField ("Login:","",16, TextField.ANY);
    		 adicionarCliente.append(tfLogin);
    		tfEmail = new TextField ("E-mail:","",20, TextField.ANY);
    		 adicionarCliente.append(tfEmail);
       		adicionarCliente.addCommand(salvar);
       		adicionarCliente.addCommand(voltar);
       		adicionarCliente.setCommandListener(this);

       		adicionarProduto = new Form ("Adicione novo produto");
       		tfCodigo = new TextField ("Código:","",7, TextField.ANY);
       		tfProduto = new TextField ("Descrição","",20, TextField.ANY);
       		tfTam = new TextField ("Tamanho","",10, TextField.ANY);
       		tfPreco = new TextField ("Preco Unitario:","",7, TextField.ANY);
       		adicionarProduto.append(tfCodigo);
       		adicionarProduto.append(tfProduto);
       		adicionarProduto.append(tfTam);
       		adicionarProduto.append(tfPreco);
       		adicionarProduto.addCommand(salvar);
       		adicionarProduto.addCommand(voltar);
      		 adicionarProduto.setCommandListener(this);
       
      		adicionarPedido = new Form ("Adicione novo pedido");
      		String[] strings = new String[] { "" };
      		clientesCG = new ChoiceGroup("Clientes cadastrados", ChoiceGroup.POPUP, strings, null);
       		produtosCG = new ChoiceGroup("Produtos cadastrados", ChoiceGroup.POPUP, strings, null);
       		tfQuantidade = new TextField("Quantidade","",3, TextField.NUMERIC);
       		adicionarPedido.append(clientesCG);
       		adicionarPedido.append(produtosCG);
       		adicionarPedido.append(tfQuantidade);
       		adicionarPedido.addCommand(salvar);
       		adicionarPedido.addCommand(voltar);
       		adicionarPedido.setCommandListener(this);
       
	   	rmsPedidos = new RmsVenda();
	   	rmsClientes = new RmsVenda();
	   	rmsProdutos = new RmsVenda();
	   	telaInformacoes = new Form ("Estatísticas do sistema");
	   	telaInformacoes.addCommand(voltar);
	   	telaInformacoes.setCommandListener(this);
   	}  

   	public void startApp() {  
		display.setCurrent(telaInicial);
	   	RSPedidos  = rmsPedidos.abrirRecordStore(BDPedidos);
	   	RSClientes = rmsClientes.abrirRecordStore(BDClientes);
	   	RSProdutos = rmsProdutos.abrirRecordStore(BDProdutos);
	   	vecClientes = rmsClientes.listarRegistros(RSClientes);
	   	vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
	   	vecPedidos  = rmsPedidos.listarRegistros(RSPedidos);
   	}  

   	public void gerenciarClientes(){
		vecClientes = rmsClientes.listarRegistros(RSClientes);
	   	gerarTela(vecClientes, telaClientes);
	   	display.setCurrent(telaClientes);
   	}

   	public void gerenciarProdutos(){
		vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
	   	gerarTela(vecProdutos, telaProdutos);
	   	display.setCurrent(telaProdutos);
   	}

   	public void gerenciarPedidos(){
	    	vecPedidos  = rmsPedidos.listarRegistros(RSPedidos);
	    	gerarTela(vecPedidos, telaPedidos);
	    	display.setCurrent(telaPedidos);
   	}

   	private void gerarTela(Vector vecNomes, List tela){
		tela.deleteAll();
		for (int i = 0; i < vecNomes.size(); i++) {
			if (tela.getTitle()=="Cadastro de Clientes"){
				Clientes item = (Clientes)vecNomes.elementAt(i);
				String nome = item.getNome();
				tela.append(nome, null);
			}else if (tela.getTitle()=="Cadastro de Produtos"){
				Produtos item = (Produtos)vecNomes.elementAt(i);
				String nome = item.getNome();
				float preco = item.getPreco();
				tela.append(nome+" R$"+preco, null);
			}else{
				Pedidos item = (Pedidos)vecNomes.elementAt(i);
				String cliente = item.getCliente();
				String produto = item.getProduto();
				int quantidade = item.getQuantidade();
				tela.append(cliente+" "+produto+" "+quantidade, null);
			}
		}
		testarComandoApagar(tela);
		display.setCurrent(tela);	
	}

   	private void testarComandoApagar(List tela){
	   	if ((tela.getString(0)).regionMatches(true, 8, "não cadastrados", 0, 15)){
			Ticker ticker = new Ticker ("Nenhum registro encontrado neste cadastro");
		   	tela.setTicker(ticker);
		   	tela.removeCommand(apagar);
	   	}else if ((tela.getString(0)).regionMatches(true, 9, "não cadastrados", 0, 15)){
			Ticker ticker = new Ticker ("Nenhum registro encontrado neste cadastro");
			tela.setTicker(ticker);
			tela.removeCommand(apagar);
	  	}else{
			tela.addCommand(apagar);
			tela.setTicker(null);
		}
  	}
  
	private void testarComandoSalvar(Displayable d){
		if (d == adicionarCliente){
			if (tfCliente.size() != 0){
				gravacaoOK = true;
		   	}
	   	}else if (d == adicionarProduto){
			if ((tfProduto.size() != 0) && (tfPreco.size() != 0)){
				gravacaoOK = true;
		   	}
	   	}else if (d == adicionarPedido){
			if ((clientesCG.getString(0)== "Clientes não cadastrados") || ((produtosCG.getString(0))=="Produtos não cadastrados") || (tfQuantidade.size()==0)) {
			   	gravacaoOK = false;
		   	}else
				gravacaoOK=true;
   		}
   	}

   	public void pauseApp() { }  
      
   	public void destroyApp(boolean unconditional) {
		rmsPedidos.closeRecordStore(RSPedidos);
	   	rmsClientes.closeRecordStore(RSClientes);
	   	rmsProdutos.closeRecordStore(RSProdutos);
	   	notifyDestroyed();
   	}     

   	private void zerarRegistros(){
	 	 rmsClientes.zerarRegistros(RSClientes, "BancoClientes");
	 	 rmsProdutos.zerarRegistros(RSProdutos, "BancoProdutos");
	 	 rmsPedidos.zerarRegistros(RSPedidos, "BancoPedidos");
		 RSPedidos  = rmsPedidos.abrirRecordStore(BDPedidos);
		 RSClientes = rmsClientes.abrirRecordStore(BDClientes);
		 RSProdutos = rmsProdutos.abrirRecordStore(BDProdutos);
		 vecProdutos.removeAllElements();
		 vecClientes.removeAllElements();
		 vecPedidos.removeAllElements();
		 vecClientes = rmsClientes.listarRegistros(RSClientes);
		 vecProdutos = rmsProdutos.listarRegistros(RSProdutos);
		 vecPedidos  = rmsPedidos.listarRegistros(RSPedidos);
		 mostrarAlerta("Registros zerados", "Bancos de dados apagados");
	  	 display.setCurrent(alerta, telaInicial);
   	}

   	private void mostrarInformacoes(RecordStore rs){
		try{
			String nomeRs = rs.getName();
			String numero = Integer.toString(rs.getNumRecords());
			String tamanho = Integer.toString(rs.getSize());
  		    	String disponivel = Integer.toString(rs.getSizeAvailable());
			StringItem nomeSI = new StringItem ("Nome do RecordStore", nomeRs);
			StringItem tamanhoOc = new StringItem ("Tamanho ocupado (em bytes)", tamanho.toString());
			StringItem numeroReg = new StringItem ("Número de registros existentes", numero);
		    	StringItem tamanhoDis = new StringItem ("Tamanho disponível (em bytes)", disponivel);
			telaInformacoes.append(nomeSI);
			telaInformacoes.append(tamanhoOc);
			telaInformacoes.append(numeroReg);
			telaInformacoes.append(tamanhoDis);
		}
		catch (Exception exc) {}
	}

   	private void mostrarAlerta(String tipoAlerta, String msg){
		alerta = new Alert(tipoAlerta, msg, null, AlertType.WARNING); 
	      	alerta.setTimeout(Alert.FOREVER); 
	}

   	public void commandAction(Command c, Displayable d){  
        	if (c == List.SELECT_COMMAND){
        		String selection = telaInicial.getString(telaInicial.getSelectedIndex());
        	 	if (selection == "Clientes"){ 
        		 	gerenciarClientes();
        	 	}else if(selection == "Produtos"){
        			gerenciarProdutos();
        	 	}else if(selection == "Pedidos"){
        			gerenciarPedidos();
        	 	}else if(selection == "Zerar Registros"){
        			zerarRegistros();	    		 
        	 	}else if(selection == "Estatísticas"){
        			mostrarInformacoes(RSClientes);	    		 
        		 	mostrarInformacoes(RSProdutos);
        		 	mostrarInformacoes(RSPedidos);
     			 	display.setCurrent(telaInformacoes);
        	 	}else if (selection == "Transmitir dados"){
        			connectThreadClientes(); 
        	 	}
         	} else if (c==sair) {
               		destroyApp(true);    
            	}else if (c == sobre) {    
            		String m1 = ("Trabalho de Lab. de Engenharia de Software\n");
               		String m2 = ("Prof. Alexandre Heleno\n");
               		String m3 = ("Alunos:\n");
               		String m4 = ("Danielle Gomes\n");
               		String m5 = ("Hugo Gomes\n");
               		String m6 = ("Gustavo Henrique\n");
               		String m7 = ("Ramon Ferreira");
            		mostrarAlerta("Sobre",m1+m2+m3+m4+m5+m6+m7);
            		display.setCurrent(alerta,  telaInicial);
            	}else if (c==novo){
            		if (d == telaClientes){
            			tfCliente.setString("");
            			display.setCurrent(adicionarCliente);
            		}else if (d == telaProdutos){
           			tfProduto.setString("");
          			tfPreco.setString("");
          			display.setCurrent(adicionarProduto);
            		}else if (d == telaPedidos){
           			tfQuantidade.setString("");
           			clientesCG.deleteAll();
           			produtosCG.deleteAll();
           			for (int i = 0; i < vecClientes.size(); i++) {
        				Clientes item = (Clientes)vecClientes.elementAt(i);
        				String nome = item.getNome();
        				clientesCG.append(nome, null);
           			}
           			for (int i = 0; i < vecProdutos.size(); i++) {
           				Produtos item = (Produtos)vecProdutos.elementAt(i);
           				String nome = item.getNome();
           				produtosCG.append(nome, null);
          			}
           			display.setCurrent(adicionarPedido);
            		}
            	}else if (c==salvar) {
       			testarComandoSalvar(display.getCurrent());
            		if (gravacaoOK == false){
        			mostrarAlerta("Aviso", "Registro vazio não será salvo\n"+"Tente novamente");
        		   	display.setCurrent(alerta, display.getCurrent());
            		}else {
        			if (d == adicionarCliente){
               				rmsClientes.adicionarRegistroClientes(RSClientes, tfCliente.getString());
               		    		vecClientes = rmsClientes.listarRegistros(RSClientes);
               		    		tfCliente.setString("");
        		   	}else if (d == adicionarProduto){
        				rmsProdutos.adicionarRegistroProdutos(RSProdutos, tfProduto.getString(), Float.parseFloat(tfPreco.getString()));
               		    		vecProdutos  = rmsProdutos.listarRegistros(RSProdutos);
               		    		tfProduto.setString("");
                			tfPreco.setString("");
        		   	}else if (d == adicionarPedido){
        				rmsPedidos.adicionarRegistroPedido(RSPedidos, clientesCG.getString(clientesCG.getSelectedIndex()), produtosCG.getString(produtosCG.getSelectedIndex()), Integer.parseInt(tfQuantidade.getString()));
        			   	vecPedidos  = rmsPedidos.listarRegistros(RSPedidos);
               		   	tfQuantidade.setString("");
        		   	}
        		   	gravacaoOK=false;
            	   	display.setCurrent(telaInicial);
        	   	}         	   
             	}else if (c==apagar){
            	 	if (d == telaClientes){
            			deletedFlags = new boolean[telaClientes.size()];
            			telaClientes.getSelectedFlags(deletedFlags);
               			rmsClientes.apagarRegistros(RSClientes, vecClientes, deletedFlags);
           		    	vecClientes = rmsClientes.listarRegistros(RSClientes);               			
            		}else if (d == telaProdutos){
            			deletedFlags = new boolean[telaProdutos.size()];
            			telaProdutos.getSelectedFlags(deletedFlags);
               			rmsProdutos.apagarRegistros(RSProdutos, vecProdutos, deletedFlags);
           		    	vecProdutos  = rmsProdutos.listarRegistros(RSProdutos);
            		}else if (d == telaPedidos){
            			deletedFlags = new boolean[telaPedidos.size()];
            			telaPedidos.getSelectedFlags(deletedFlags);
               			rmsPedidos.apagarRegistros(RSPedidos, vecPedidos, deletedFlags);
   	         	    	vecPedidos  = rmsPedidos.listarRegistros(RSPedidos);
            		}
           		display.setCurrent(telaInicial);
             	}else if (c==voltar){
           		if (d == adicionarPedido){
           			display.setCurrent(telaPedidos);
           		}else{
           			display.setCurrent(telaInicial);
           		}
        	}	
    	}
      
   	private void connectThreadClientes(){
	 	t = new Thread(this);
	     	t.start();
   	}

	public void run(){
		try{
			conectarEnviarPedidos();
		}catch (Exception e){}
	}

	private void conectarEnviarPedidos(){
  		String url_servidor ="http://localhost:8080/VendaRemotaServlet/RecebePedidos"; 
  		conClientes = new GetPostRegistros(url_servidor);
  		String mensagem;
  		try{
  			mensagem = conClientes.enviarRegistros(vecPedidos);
  			if (mensagem == null){
  				mensagem = "Erro de comunicação com o servlet";
  			}
  			mostrarAlerta("Resposta do Servlet", mensagem);
  		    	display.setCurrent(alerta, telaInicial);
  		}catch (Exception e){}
  		display.setCurrent(telaInicial);
  	}
}
erro:

Running with storage root C:\Users\Ferreira\j2mewtk\2.5.2\appdb\temp.DefaultColorPhone78

Running with locale: Portuguese_Brazil.1252

Running in the identified_third_party security domain

java.lang.IndexOutOfBoundsException

at javax.microedition.lcdui.ChoiceGroup.checkIndex(+19)

at javax.microedition.lcdui.ChoiceGroup.getString(+11)

at javax.microedition.lcdui.List.getString(+8)

at principal.VendaRemota.testarComandoApagar(+5)

at principal.VendaRemota.gerarTela(+204)

at principal.VendaRemota.gerenciarClientes(+27)

at principal.VendaRemota.commandAction(+32)

at javax.microedition.lcdui.List.callKeyPressed(+80)

at javax.microedition.lcdui.Display$DisplayAccessor.keyEvent(+198)

at javax.microedition.lcdui.Display$DisplayManagerImpl.keyEvent(+11)

at com.sun.midp.lcdui.DefaultEventHandler.keyEvent(+127)

at com.sun.midp.lcdui.AutomatedEventHandler.keyEvent(+210)

at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.handleVmEvent(+114)

at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+57)

4 Respostas

Norxs

bom não testei … mas vamos lá:

um explicação bem simples é que a lista que tu tá enviando no testarComandoApagar … está vazia … uma possibilidade disso é que em gerarTela … tu remove todos os elementos no início … assim se o Vector vecNomes vier vazio … a lista que tu passa para o comando (testarComandoApagar(tela); … linha 171) vai estar conseqüentemente vazia … dando erro quando for chamar o 1 if na linha 176 ((tela.getString(0)) …

obs: nunca usei esse regionMatches … interessante :stuck_out_tongue: … o que tu queria com ele exatamente?

R

Norxs,
estou tentando implementar uma aplicação para Sistemas de Pizza Deliveries, mas muitas coisas me fogem, como por exemplo, fiz um bem simples com poucos campos e funcionou quando aumento deu esse problemas e tem mais, quando mando transmitir os dados, ele encontra o servlet mas não abre uma página html que recebe a lista desses dados.

como faço para lhe mandar o código completo feito em eclipse me?

grato,

Ramon

Norxs

que campos tu aumenta?

tu testo debugar o que eu sugeri ali em cima?

R

Aumentei os campos de endereço, telefone, senha, login e e-mail.
e não debuguei pq não conheço essa opção.

vc tem msn? o meu é [email removido]

assim ficaria mais fácil, não acha?

Criado 16 de junho de 2008
Ultima resposta 16 de jun. de 2008
Respostas 4
Participantes 2