J2ME - Problemas em abrir forms no cel

Boa Noite a todos.

Ufa, finalemte terminei a minha aplicação móvel para o tcc, no pc ela roda tranquilamente no emulador e assim foi na apresentação, porém em um dos meus cel(Motorola V9) encontrei um problema sério. A aplicação passa por um login e entra em um menu principal, esse menu foi feito em canvas e possui icones, ao clicar no icone era para ele abrir uma lista, ou dependendo do icone ele abre um form. O problema é que loga normalmente, abre o menu, mas ao clicar no icone não abre os demais forms e nem emite uma mensagem de erro. É uma aplicação cliente que acessa um servidora(Servlets).

Abaixo a Classe de Conexão, Menu e um Form de exemplo:

[code]package Conexao;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Displayable;

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

/**
*

  • @author Guii
    */
    public class Conexao extends Thread
    {
    HttpConnection http=null;
    DataOutputStream os=null;
    DataInputStream is=null;
    String url;

    public Conexao()
    {

    }
    public HttpConnection run(String url)
    {
    this.url=url;
    System.out.println(url);
    //Cria conexão http na url informada
    try
    {
    http = (HttpConnection) Connector.open(url);
    http.setRequestMethod(HttpConnection.POST);//envia método do pedido : POST ou GET
    http.setRequestProperty(“User-Agent”,“Profile/MIDP-1.0, Configuration/CLDC-1.0”);//Informação de cabeçalho a ser enviado
    http.setRequestProperty(“Content-Language”,“en-US”);

             }
             catch (IOException ex)
             {
                 ex.printStackTrace();
             }
             return http;
    

    }
    public DataOutputStream Output() throws IOException
    {
    os =(DataOutputStream)http.openDataOutputStream();
    return os;
    }
    public DataInputStream Input() throws IOException
    {
    is =(DataInputStream)http.openDataInputStream();
    return is;
    }
    public void Close() throws IOException
    {
    http.close();
    }
    }[/code]

Menu

[code]package Forms;

import Mlearning.Mlearning;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Vector;

import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Graphics;
import javax.microedition.lcdui.Image;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.Ticker;

public class MenuCanvas extends Canvas implements CommandListener
{
private Command detalheCommand = new Command(“Detalhe”, Command.SCREEN, 1);
private Mlearning midlet;
private Display display;
private int x, y;
private Vector opcoesVector;
private int widthIcon, heightIcon;
private int margemMenu, margemQuadrante, numQuadX, numLinhasTela, numLinhas, linhaScroll;
private Ticker user;
String username;
String usuario;

public MenuCanvas(Mlearning midlet, Display display, String username, String usuario) throws IOException
{
           this.usuario=usuario;
	this.midlet = midlet;
	this.display = display;
            this.username=username;
            user=new Ticker(this.username);
            this.setTicker(user);
	this.addCommand(detalheCommand);
	this.setCommandListener(this);


	/*
	 Só mecher nas variaveis WidthIcon, HeightIcon, MargemQuadrante
	 O restante é calculado, inclusive com base nessas 3 variáveis
	*/
	
            //Tamanho do icone em pixel. Todos devem ter as mesmas dimensões.
	this.widthIcon = 50;
	this.heightIcon = 50;

	//Margem para o icone não ficar colado
	this.margemQuadrante = 2;

	/*
	 Abaixo são os calculos de ajustagem dos icones na tela
	 */

	//Posicionando no inicio do menu
	this.x = this.y = 0;

	//Quantidade de quadrantes por linha
	this.numQuadX = this.getWidth()/(this.widthIcon+(2*this.margemQuadrante));

	//Numero de linhas por tela
	this.numLinhasTela = this.getHeight()/(this.heightIcon+(2*this.margemQuadrante));

	//Margem do menu, pra tentar centralizar o menu horizontalmente
	this.margemMenu = (this.getWidth() - this.numQuadX*(this.widthIcon + (2*this.margemQuadrante)))/2;

	//Iniciando vetor com as opções
	this.carregaOpcoes();

	//Número de linhas
	if ( this.opcoesVector.size() % this.numQuadX == 0)
		this.numLinhas = this.opcoesVector.size()/this.numQuadX;
	else
		this.numLinhas = (this.opcoesVector.size()/this.numQuadX)+1;

	//Número de linhas de scroll, para visualizar opções além da tela
	this.linhaScroll = 0;
}

/*
 Criação dos hashtables, onde cada um dele é respectivo a uma opção do menu
 */

protected void carregaOpcoes()
{
	this.opcoesVector = new Vector();
	Hashtable opcaoTable;
             /*

	 * Cada hashtable guarda as informações de uma opção:
	 *    item: O nome do item, irá aparecer na parte superior do canvas.
	 *    imagem: Caminho do arquivo a ser carregado como imagem do menu
	 *    descricao: Alguma informação a mais sobre a opção, é exibido quando o usuário seleciona o comando "Detalhes".
	 */
	try {
		opcaoTable = new Hashtable();
		opcaoTable.put("item", "Cadastre-se em um curso");
		opcaoTable.put("imagem", Image.createImage("/Curso.png"));
		opcaoTable.put("descricao", "Curso");
		opcoesVector.addElement(opcaoTable);

		opcaoTable = new Hashtable();
		opcaoTable.put("item", "Quiz");
		opcaoTable.put("imagem", Image.createImage("/Materiais.png"));
		opcaoTable.put("descricao", "Quiz");
		opcoesVector.addElement(opcaoTable);

		opcaoTable = new Hashtable();
		opcaoTable.put("item", "Conteudo");
		opcaoTable.put("imagem", Image.createImage("/Atividades.png"));
		opcaoTable.put("descricao", "Exercicios");
		opcoesVector.addElement(opcaoTable);

                    opcaoTable = new Hashtable();
		opcaoTable.put("item", "Notas");
		opcaoTable.put("imagem", Image.createImage("/Notas.png"));
		opcaoTable.put("descricao", "Notas");
		opcoesVector.addElement(opcaoTable);

		opcaoTable = new Hashtable();
		opcaoTable.put("item", "Colaboracao");
		opcaoTable.put("imagem", Image.createImage("/mensageiro.png"));
		opcaoTable.put("descricao", "Colaboracao");
		opcoesVector.addElement(opcaoTable);

		opcaoTable = new Hashtable();
		opcaoTable.put("item", "Ajuda");
		opcaoTable.put("imagem", Image.createImage("/Ajuda.png"));
		opcaoTable.put("descricao", "Ajuda");
		opcoesVector.addElement(opcaoTable);

		opcaoTable = new Hashtable();
		opcaoTable.put("item", "Alterar Senha");
		opcaoTable.put("imagem", Image.createImage("/Configuracao.png"));
		opcaoTable.put("descricao", "Alterar Senha");
		opcoesVector.addElement(opcaoTable);

		opcaoTable = new Hashtable();
		opcaoTable.put("item", "Sair");
		opcaoTable.put("imagem", Image.createImage("/Sair.png"));
		opcaoTable.put("descricao", "Sair");
		opcoesVector.addElement(opcaoTable);

	} catch (Exception e) {}
}

protected void paint(Graphics g)
{
	//Colocando fundo branco na tela
	g.setColor(255, 255, 255);
	g.fillRect(0, 0, getWidth(), getHeight());

	//Definindo o título a ser exibido no aplicativo
	this.setTitle((String)((Hashtable)opcoesVector.elementAt((this.numQuadX*this.y)+ this.x)).get("item"));

	//Desenhando quadrado que indica o item selecionado até o momento
	g.setColor(35, 118, 225); //um certo tom de azul

	g.fillRect((this.x*(this.widthIcon+(2*this.margemQuadrante)))+this.margemMenu,
			   (this.y-this.linhaScroll)*(this.heightIcon+(2*this.margemQuadrante)),
			   this.widthIcon+(this.margemQuadrante*2),
			   this.heightIcon+(this.margemQuadrante*2));

	//Colocando os icones na tela
	for ( int indiceY = 0; indiceY < this.numLinhas; indiceY++) {
		//Se tiver scroll, não desenha a quantidade especifica
		if ( indiceY < (this.linhaScroll-1) )
			continue;
		for ( int indiceX = 0; indiceX < this.numQuadX; indiceX++) {
			//Condição de parada para a quantidade de icones
			if ((this.numQuadX*indiceY)+ indiceX >= this.opcoesVector.size())
				break;

			//Desenhando o icone
			g.drawImage((Image)((Hashtable)opcoesVector.elementAt((this.numQuadX*indiceY)+ indiceX)).get("imagem"),
						((indiceX*(this.widthIcon+(2*this.margemQuadrante)))+this.margemQuadrante)+this.margemMenu,
						((indiceY-linhaScroll)*(this.heightIcon+(2*this.margemQuadrante)))+this.margemQuadrante,
						Graphics.TOP | Graphics.LEFT);
		}
	}
}

protected void keyPressed(int keyCode)
{
	switch (getGameAction(keyCode)) {
		case Canvas.DOWN:
			if ( ++y >= this.numLinhas || (this.numQuadX*this.y)+ this.x >= this.opcoesVector.size() )
				//Chegou ao final, volta para a primeira linha e zera scroll
				this.linhaScroll = this.y = 0;

			if ( (this.y - this.linhaScroll) >= this.numLinhasTela )
				//Passou a quantidade de linhas por tela, incrementa scroll
				this.linhaScroll++;
			break;
		case Canvas.UP:
			if ( --y < 0 ) {
				//Posicionando na ultima linha
				y = this.numLinhas - 1;

				//Verificando se na ultima linha, na coluna X existe opcao
				if ( (this.numQuadX*this.y)+ this.x >= this.opcoesVector.size()) {
					//Não existe opcao, voltando uma linha pra cima então
					this.y--;

					//Verificando a necessidade de scroll
					if ( (this.y - this.linhaScroll) >= this.numLinhasTela )
						this.linhaScroll++;
				}
				else if ( this.y >= this.numLinhasTela ) {
					//Atribuindo o scroll para a ultima linha
					this.linhaScroll = this.numLinhas - this.numLinhasTela;
				}
			} else if( this.linhaScroll > 0)
				//Subindo de linha, diminuindo o scroll
				this.linhaScroll--;
			break;
		case Canvas.RIGHT:
			if ( ++x >= this.numQuadX ) {
				//passou do ultimo icone da linha, zera o x
				x = 0;

				//Se passar da ultima linha e ultimo icone, volta para 0x0
				if (++y >= this.numLinhas)
					this.linhaScroll = this.y = 0;

				//Passou da quantidade de linhas da tela, aumenta scroll
				else if ( (this.y - this.linhaScroll) >= this.numLinhasTela )
					this.linhaScroll++;

			//Se tiver no ultimo elemento do menu, retorna para 0x0
			}else if ((this.numQuadX*this.y) + this.x >= this.opcoesVector.size())
				this.x = this.y = this.linhaScroll = 0;
			break;
		case Canvas.LEFT:
			if ( --x < 0 ) {
				//No primeiro, foi para a esquerda, direciona para o ultimo da linha
				this.x = this.numQuadX - 1;

				//Subindo de linha
				if ( --y < 0 ) {
					//Estava na primeira linha, posicionando na ultima
					this.y = this.numLinhas-1;

					if ( this.y >= this.numLinhasTela )
						//calculando scroll
						this.linhaScroll = this.numLinhas - this.numLinhasTela;
				}else if (this.linhaScroll > 0){
					//Subiu de linha, decrementa o scroll se existir
					this.linhaScroll--;
				}
				//posicionando o X de acordo com o ultimo icone da linha
				if ( (this.numQuadX*this.y) + this.x >= this.opcoesVector.size()) {
					do {
						this.x--;
					} while ((this.numQuadX*this.y) + this.x >= this.opcoesVector.size());
				}
			}
			break;
		case Canvas.FIRE:
    try {
        //Vai para o método que executa a ação da opção selecionada
        this.executarOpcao(x, y);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
			break;
	}

	repaint();
}

private void executarOpcao(int xOpcao, int yOpcao) throws IOException
{
	/*
	 * Nesse método é tratado o que se deseja executar.
	 * Para encontrar a opção correspondente no vector, use a variável
	 * indiceOpcao, calculada abaixo:
	 * int indiceOpcao = (this.numQuadX*yOpcao)+ xOpcao;
	 */
             String selecionado;
             selecionado= (String)((Hashtable)opcoesVector.elementAt((this.numQuadX*this.y)+ this.x)).get("item");
             
             if (selecionado.equals("Cadastre-se em um curso"))
             {
                 Curso curso = new Curso(this,this.usuario,midlet.getPorta());
                 display.setCurrent(curso.frmCurso);
             }
             else if(selecionado.equals("Conteudo"))
             {
                 Conteudo conteudo=new Conteudo(this, this.usuario,this.display, midlet.getPorta(),"Menu");
                 //display.setCurrent(conteudo.lista);
             }
             else if(selecionado.equals("Sair"))
             {
                 midlet.encerrarMIDlet();
             }
             else if(selecionado.equals("Quiz"))
             {
                Conteudo conteudo=new Conteudo(this, this.usuario,this.display, midlet.getPorta(),"Quiz");
             }
             else if(selecionado.equals("Colaboracao"))
             {
                 Colaboracao c = new Colaboracao(this,this.usuario,midlet.getPorta());
                 
             }
             else if(selecionado.equals("Notas"))
             {
                 Nota nota = new Nota(this, 0, usuario, 0, 0, midlet.getPorta());
                 Object aux=nota.ListaConteudo();

             }
             else if(selecionado.equals("Alterar Senha"))
             {
                 Senha s= new Senha(this,midlet.getPorta(),this.usuario);

             }
             else if(selecionado.equals("Ajuda"))
             {
                 Alert a = new Alert("");
                 a.setString("Para maiores informações sobre o funcionamento do Aplicativo consulte o nosso TCC no Capítulo Desenvolvimento.");
                 a.setTimeout(Alert.FOREVER);
                 display.setCurrent(a);
             }
}

public void commandAction(Command command, Displayable displayable)
{
	if ( command.equals(detalheCommand))
            {
		display.setCurrent(new Alert((String)((Hashtable)opcoesVector.elementAt((this.numQuadX*this.y)+ this.x)).get("item"),
								 (String)((Hashtable)opcoesVector.elementAt((this.numQuadX*this.y)+ this.x)).get("descricao"),
										 null,
									 AlertType.INFO), this);
	}
            else
            {
                 try {
			this.midlet.destroyApp(true);
                     }
		 catch (Exception e) {}
	}
}
    public void Voltar()
    {
        midlet.getTela().setCurrent(this);
    }
    public Display Tela()
    {
        return display;
    }

}[/code]

Um dos Forms que o menu acessa:

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package Forms;

import Conexao.Conexao;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.Date;
import java.util.Vector;
import javax.microedition.io.HttpConnection;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.List;
import javax.microedition.lcdui.StringItem;
import javax.microedition.lcdui.TextField;

/**
*

  • @author Guii
    */
    public class Colaboracao extends Form implements CommandListener
    {
    Conexao conn=new Conexao();
    MenuCanvas menu;
    String usuario,url,msg=null, val1=null, val2=null;;
    String porta;
    DataInputStream is=null;
    DataOutputStream os= null;
    List lista2=null;
    Vector v;
    Conteudo c;//= new Conteudo(menu, usuario, menu.Tela(), porta,“Colaboracao”);
    Object aux,aux2;
    StringItem pergunta=null;
    Form frmpergunta=null,frmcriar=null;
    TextField txtresposta=null,txttitulo=null, txtpergunta=null;
    Command cmdresp=null, cmdvoltar=null, cmdcriar=null,cmdenviar=null, cmdresolvido=null;
    Date data = new Date();

    public Colaboracao(MenuCanvas menu, String usuario, String porta) throws IOException
    {
    super(“Colaboracao”);
    this.menu=menu;
    this.usuario=usuario;
    this.porta = porta;
    url = porta + “/MlearningServ/Colaboracao”;
    lista2=new List(“Discussões”, List.IMPLICIT);
    frmpergunta= new Form(“Ambiente Colaborativo”);
    frmcriar= new Form(“Pergunte ao seus colegas”);
    frmcriar.setCommandListener(this);
    cmdresp=new Command(“Responder”, Command.OK, 1);
    cmdvoltar= new Command(“Voltar”,Command.BACK, 1);
    cmdcriar = new Command(“Criar”, Command.OK, 1);
    cmdenviar = new Command(“Enviar”, Command.OK, 1);
    cmdresolvido = new Command(“Resolvido”, Command.OK, 1);
    c= new Conteudo(menu, usuario, menu.Tela(), porta,“Colaboracao”);
    }

    public void ListaDiscussoes(Object aux) throws IOException
    {
    lista2.deleteAll();
    this.aux=aux;
    menu.Tela().setCurrent(lista2);
    lista2.setCommandListener(this);
    conn.run(url);

     os=conn.Output();
     os.writeUTF("Lista Discussao");
     os.writeUTF(String.valueOf(this.aux));
     os.close();
    
     v=new Vector();
    
     is=conn.Input();
    
     String codigo,discussao;
    
     while(is.available()!=0)
     {
         v.addElement(is.readUTF());
         discussao=is.readUTF();
         lista2.append(discussao, null);
     }
     lista2.addCommand(cmdcriar);
     lista2.addCommand(cmdvoltar);
     is.close();
     conn.Close();
    

    }

    public void Pergunta() throws IOException
    {
    frmpergunta.deleteAll();

     int cmd;
     cmd=lista2.getSelectedIndex();
     aux2=v.elementAt(cmd);
    
     txtresposta=new TextField("", "", 200, TextField.ANY);
    
     conn.run(url);
     os=conn.Output();
     os.writeUTF("Pergunta");
     os.writeUTF(String.valueOf(aux2));
     os.close();
    
     is=conn.Input();
     String auxp=is.readUTF();
    
     pergunta=new StringItem(auxp, null);
     frmpergunta.append(pergunta);
     frmpergunta.append(txtresposta);
     frmpergunta.addCommand(cmdresp);
     frmpergunta.addCommand(cmdvoltar);
     frmpergunta.setCommandListener(this);
     menu.Tela().setCurrent(frmpergunta);
     is.close();
     conn.Close();
     ListaRespostas();
    

    }
    public void Resposta(String stat) throws IOException
    {
    frmpergunta.setCommandListener(this);

     String aux=usuario+" responde as "+data+ ": "+txtresposta.getString();
    
     StringItem StringItem = new StringItem(aux, null);
     frmpergunta.append(StringItem);
     menu.Tela().setCurrent(frmpergunta);
    
     conn.run(url);
     os=conn.Output();
    
     os.writeUTF("Enviar Resposta");
     os.writeUTF(String.valueOf(this.aux2));
     os.writeUTF(aux);
     os.writeUTF(usuario);
     os.writeUTF(stat);
    
     os.close();
    
     is=conn.Input();
     msg=is.readUTF();
     is.close();
     conn.Close();
     txtresposta.setString("");
     showAlert(msg);
    

    }
    public void ListaRespostas() throws IOException
    {
    conn.run(url);
    os=conn.Output();
    os.writeUTF(“Carregar Respostas”);
    os.writeUTF(String.valueOf(this.aux2));
    os.close();

     is=conn.Input();
    
     String lresp=null;
    
     v=new Vector();
    
     while (is.available()!=0)
     {
         lresp=is.readUTF();
         StringItem StringItem = new StringItem(lresp,null);
         //alteração para colocguiar o comando resolver
         frmpergunta.append(StringItem);
     }
     is.close();
     
     /*if(luser.equals(usuario))
     {
         frmpergunta.addCommand(cmdresolvido);
     }*/
     conn.Close();
     menu.Tela().setCurrent(frmpergunta);
     Resolver();
    

    }
    public void CriarDiscussao()
    {
    txttitulo= new TextField(“Título”,"", 70,TextField.ANY);
    txtpergunta=new TextField(“Pergunta”,"", 200, TextField.ANY);
    frmcriar.append(txttitulo);
    frmcriar.append(txtpergunta);
    frmcriar.addCommand(cmdvoltar);
    frmcriar.addCommand(cmdenviar);
    menu.Tela().setCurrent(frmcriar);
    }
    public void EnviarDiscussao() throws IOException
    {

     conn.run(url);
     os=conn.Output();
    
     os.writeUTF("Enviar Discussao");
     os.writeUTF(txttitulo.getString()+" -->Por: "+usuario);
     os.writeUTF(String.valueOf(this.aux));
     os.writeUTF(usuario+" pergunta: "+txtpergunta.getString());
     os.writeUTF(usuario);
     os.writeUTF("Aberto");
     System.out.println("aux"+String.valueOf(this.aux));
     os.close();
    
     is=conn.Input();
     msg=is.readUTF();
     System.out.println("A mensagem é:"+msg);
     is.close();
     conn.Close();
     
     lista2.deleteAll();
     ListaDiscussoes(this.aux);
     showAlert(msg);
    

    }
    public void Resolver() throws IOException
    {
    conn.run(url);
    os=conn.Output();
    os.writeUTF(“Resolver”);
    os.writeUTF(String.valueOf(this.aux2));
    os.close();

     is=conn.Input();
    
     String luser=null;
     String stat=null;
    
     v=new Vector();
    
     while (is.available()!=0)
     {
         luser=is.readUTF();
         stat=is.readUTF();
     }
     is.close();
     if(luser.equals(usuario)&&stat.equals("Aberto"))
     {
         frmpergunta.addCommand(cmdresolvido);
     }
     else if(luser.equals(usuario)&&stat.equals("Resolvido"))
     {
         frmpergunta.removeCommand(cmdresp);
     }
     conn.Close();
    

    }
    public void Resolvido() throws IOException
    {
    conn.run(url);
    os=conn.Output();
    os.writeUTF(“Resolvido”);
    os.writeUTF(String.valueOf(this.aux2));
    os.close();

     is=conn.Input();
     String msg1=is.readUTF();
     conn.Close();
    
     
     ListaDiscussoes(aux);
    

    }

    public void commandAction(Command c, Displayable d)
    {
    if(c==lista2.SELECT_COMMAND)
    {
    try {
    Pergunta();
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    }
    else if(c==cmdresp)
    {
    val1=txtresposta.getString();
    try {
    if(val1.equals(""))
    {
    showAlert(“Digite o comentário!”);
    }
    else
    Resposta(“Aberto”);
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    }
    else if(c==cmdcriar)
    {
    CriarDiscussao();
    }
    else if (c==cmdenviar)
    {
    val1=null;
    val2=null;
    val1=txttitulo.getString();
    val2=txtpergunta.getString();
    try {
    if(val1.equals("")&&val2.equals(""))
    showAlert(“Digite o título e a resposta”);
    else if(val1.equals(""))
    showAlert(“Digite o título!”);
    else if(val2.equals(""))
    showAlert(“Digite a sua pergunta”);

             else
                 EnviarDiscussao();
         } catch (IOException ex) {
             ex.printStackTrace();
         }
    }
    else if((c==cmdvoltar)&&(d==frmpergunta))
    {
         try {
             frmpergunta.removeCommand(cmdresolvido);
             ListaDiscussoes(aux);
         } catch (IOException ex) {
             ex.printStackTrace();
         }
    }
    else if((c==cmdresolvido)&&(d==frmpergunta))
    {
         try {
             Resposta("Resolvido");
         } catch (IOException ex) {
             ex.printStackTrace();
         }
    }
    else if((c==cmdvoltar)&&(d==lista2))
    {
         try {
             Colaboracao co = new Colaboracao(menu, usuario, porta);
         } catch (IOException ex) {
             ex.printStackTrace();
         }
    }
    else if((c==cmdvoltar)&&(d==frmcriar))
    {
         try {
             ListaDiscussoes(aux);
         } catch (IOException ex) {
             ex.printStackTrace();
         }
    }
    

    }
    public void showAlert(String msg)
    {
    Alert a = new Alert("");
    a.setString(msg);
    a.setTimeout(Alert.FOREVER);
    menu.Tela().setCurrent(a);
    }
    }[/code]

O cel pessoal não tem wi-fi, eu cadastrei um dns no-ip para minha máquina, assim eu posso acessar por gsm no meu servidor, a aplicação loga normalmente, ou seja eu consegui comunicação com o servidor, o problema é no menu, tem hora que abre os outros forms(raramente), o código funcionou para o pc, mas não no cel. Outro problema que ocorre sempre mas no computador, é o problema de estourar limites do socket tcp ip, ele ocorre quando eu estou navegando na aplicação após um determinado periodo, a aplicação é mais ou menos grande, então eu abro e fecho conexão sempre, acredito que os dois problemas ocorrem devido a minha má implementação da conexão, então vim aqui dividi com o pessoal =D

Até mais.

De fato é problema na sua implementação da Thread na Classe Conexão.java

De uma pesquisada sobre HttpConnection com Thread.

Boa Noite amigo. Você teria um exemplo de qual maneira poderia ser implementada melhor a conexão ?