Menu Travado

50 respostas
L

Tenho um okCommand(Conectar) no meu menu que inicia o Run() de uma classe que abre uma conexão socket.

Comando no okCommand

Conn.Run(); // conecta e começa a receber dadso…

Começo a receber os dados do socket normalmente porém minha aplicação fica travada neste menu Conectar…

Alguém sabe o que está acontecendo?
Obrigado.

50 Respostas

j0nny

Minha bola de cristal não funciona. :mrgreen:
Poste um pedaço do código…

L

Tenho meu clientSocket

public class ClientConnection implements Runnable {

StringBuffer sb = null;
InputStream is = null;
OutputStream os = null;
SocketConnection client = null;


public void run() {

    
    try {

        client = (SocketConnection) Connector.open("socket://");

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

  try {

      is = client.openInputStream();

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

  
    try {

        os = client.openOutputStream();

    } catch (IOException ex) {
        ex.printStackTrace();
    }
    
  try {
      
      // envio autenticação...

       os.write();
      

    } catch (IOException ex) {
        ex.printStackTrace();
    }
   
  try {

        int ch;
        sb = new StringBuffer();
        
        while ((ch = is.read()) != -1) {
               sb.append((char)ch);
                   
              
        }
   
 
   } catch (IOException ex) {
        ex.printStackTrace();
    }

}

}

no meu MIDlet abro uma instância do ClientSocket…

ClientConnection Conn = new ClientConnection();

Aí no evento do okCommand eu chamo o Conn.Run();

Ele começa a trazer os dados corretamente, mas a tela fica travada no meu com a opção okCommand…

Deu pra entender?
Obrigado.

j0nny

Cara, eu posso estar sendo xato, mas ponha seu código entre as tags.

public void escreveCerto() { System.out.println("Tags"); }

Tente fazer assim, em vez de Con.Run(), tente Con.start();

L

Está implementando Runnable, não tem start(), certo?

j0nny

Então faça o seguinte

L

Excelente… Resolveu.

j0nny

:thumbup:

L

j0nny, meu aplicativo funciona normal agora no emulador.
Quando coloco pra rodar no Samsung Omnia II com Windows Mobile 6.5 a aplicação abre normal mas na hora que dou o comando de conexão, é perguntado sobre deixar ou não utilzar a rede… rede de baixo nível etc… digo que sim pra tudo, mas não conecta… sabe o que pode ser? Diz também que uma informação strID não foi encontrada…
Obrigado!

j0nny

lzoratto:
j0nny, meu aplicativo funciona normal agora no emulador.
Quando coloco pra rodar no Samsung Omnia II com Windows Mobile 6.5 a aplicação abre normal mas na hora que dou o comando de conexão, é perguntado sobre deixar ou não utilzar a rede… rede de baixo nível etc… digo que sim pra tudo, mas não conecta… sabe o que pode ser? Diz também que uma informação strID não foi encontrada…
Obrigado!

Cara, posta a parte do código onde vc faz a conexão pra gnt ver…

L
public void run() {
    
    try {

       // Conecto com o servidor...

        client = (SocketConnection) Connector.open("socket://");

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

  try {

       is = client.openInputStream();
       os = client.openOutputStream();

      // envio alguns dados...

       os.write(.getBytes());


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

  try {

        int ch;
        sb = new StringBuffer();
        
        while ((ch = is.read()) != -1) {
               sb.append((char)ch);

              // Fico lendo o que tá chegando.......
        }
   
    } catch (IOException ex) {
        ex.printStackTrace();
    }


     isso.... funciona normal no emaulador....

    Desculpe pelo código como se coloca da forma que você pediu?
j0nny

lzoratto:
public void run() {

try {

       // Conecto com o servidor...

        client = (SocketConnection) Connector.open("socket://");

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

  try {

       is = client.openInputStream();
       os = client.openOutputStream();

      // envio alguns dados...

       os.write(.getBytes());


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

  try {

        int ch;
        sb = new StringBuffer();
        
        while ((ch = is.read()) != -1) {
               sb.append((char)ch);

              // Fico lendo o que  chegando.......
        }
   
    } catch (IOException ex) {
        ex.printStackTrace();
    }


     isso.... funciona normal no emaulador....

    Desculpe pelo código como se coloca da forma que você pediu?

Cara, não é eu q pesso, são regras do fórum :thumbup:
Qual operadora vc usa? Tem plano de dados?

L

Estou usando rede wi-fi…

j0nny

Tem algum firewall intermediando?

L

Nenhum firewall…

j0nny

Ja verificou também se seu aparelho implementa Socket?
Pq vi alguns aqui no fórum falarem que em determinados aparelhos, o socket n funciona mesmo, só HttpConnection.

L

O celular é o Samsung Omnia II com Windows Mobile 6.5, você conhece? Vou pesquisar sobre ele aceitar ou não conexões socket. Obrigado.

L

Será que o fato de meu Midlet não ser assinado, está interrompendo essa conexão socket por não ter permissão?

j0nny

Não, pois a sua aplicação deve perguntar se vc tem cereteza que quer conectar, certo?

L

Exato ela pergunta se quero continuar…

L

Mas como tem serviço de RSSFeed, deve implementar socket certo?

j0nny

Então essa hipótese pode ser descartada…

P

Correto, isto é um dos motivos, aliado posteriormente também a falta de configuração da aplicação para não mais perguntar.
Veja, para a pergunta sumir, além da aplicação ser assinada, ela tb deve ser configurada para não mais perguntar. Isto se faz no aparelho.

P

Vamos separar as coisas:

Uma coisa é o vc ter uma aplicação nativa de RSS que usa socket.

Outra coisa é esta funcionalidade ter sido exposta a implementação Java do aparelho. Como socket tem que existir em qualquer aparelho MIDP 2.0 (no 1.0 era opcional), então teoricamente você tem socket sim disponível e que pode ser usado normalmente.

L

Tem como assinar o Midlet para fazer um teste? Digo se tem como fazer sem custos como já fiz para um applet…

P

Negativo.
Quer assinar, tem que pagar.

L

Então não tem como eu testar a conexão socket no meu celular, somente no emulador…?

P

Lógico que tem, basta você responder a pergunta que aparece na tela e a aplicação naturalmente vai se conectar.
Cansei de fazer isto na minha vida de J2ME…

L

Então ai é que está o problema! Eu aceito a pergunta porém não conecta… só no emulador…

P

Tem certeza mesmo que está fazendo conforme a cartilha:

  • A conexão é realizada dentro de uma thread
  • Vc está capturando qualquer exceção e lançando na tela
  • Seu celular está com a APN configurada corretamente

Isto é o básico para funcionar.

L

Sim só esta APN que não sei como se configura pode me explicar?

P

Não posso. Depende do fabricante e as vezes no mesmo fabricante fica em lugares diferentes.

Recomendo exercitar mais seu dom de fuçador para passar a conhecer melhor o seu aparelho.

O ideal era vc encontrar o local onde está armazenado isto, jogar fora o que está lá, e ligar na operadora pedindo para enviarem novamente as configurações de acesso a internet por SMS.

L

Descubri que o problema não está não conexão. Ela acontece com sucesso.

Acontece o seguinte:

InputStream is = null;
 SocketConnection client = null;


 try {

            client = (SocketConnection) Connector.open("socket://");

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

Até aqui normal no emulador e no celular...


instancio:  try {

                         is = client.openInputStream();

               } catch (IOException ex) {
                  Error = "(is) "+ex.getMessage();
                  ex.printStackTrace();
                  }

Aí está o problema… no emulador funcionar, mas no celular da erro neste trecho e não consigo pegar a mensagem…

P

Tenho quase a absoluta certeza d q vc não está jogando esta exception na tela.

L

To sim olha só. Fiz dois programas para teste

Primeiro:

InputStream is = null;
SocketConnection client = null;

String Exception = "Conectando...";


try {


client = (SocketConnection) Connector.open("socket://");

} catch (IOException ex) {
   Exception = "Falha na conexão".concat(ex.GetMessagem());
   ex.printStackTrace();
}

Exception = "Conectou!";

Neste primeiro programa a variável Exception já vai pra tela com o valor “conectando…” pinto na tela o novo valor dela depois da conexão com sucesso…: “Conectou!”

Segundo programa:

InputStream is = null;
SocketConnection client = null;

String Exception = "Conectando...";


try {


client = (SocketConnection) Connector.open("socket://");

} catch (IOException ex) {
   Exception = "Falha na conexão".concat(ex.GetMessagem());
   ex.printStackTrace();
}


try {

is = client.openInputStream();

} catch (IOException ex) {
   Exception = "Falha ".concat(ex.GetMessagem());
   ex.printStackTrace();
}


Exception = "Conectou!"

Neste segundo programa a variável Exception já vai pra tela com o valor “conectando…” adicionei este segundo bloco e ai a coisa já não vai.

pinto na tela a variável mas ela está com valor inicial “Conectando…”

Por isso sei que o erro está sendo gerado neste bloco mas não estou conseguindo ver a causa…

Lmebrando que no emulador funciona normalmente… estes testes foram feitos no celular que é onde ocorre o problema…

P

2 coisas:

  • Pelo amor d D…adicione as tags para postar código formatado

  • Posta o código completo para vermos onde vc tá fazendo caquinha

L

Então se puder me explicar como postar o código desta forma…
Obrigado.

j0nny

lzoratto:
Então se puder me explicar como postar o código desta forma…
Obrigado.

Caracas meu… já foi explicado no início do tópico.

Use as tags code

L

Pois é tive que perguntar a outra pessoa para entender que se tratava de (code) e no fim (/code). Desculpe mas pelas explicações anteriores não tinha ficado claro para mim.

L

Consegui pegar a descrição do erro

Acontece na conexão com o servidor: javax.microedition.io.ConnectionNotFoundException:socket open: failed
Porém isso só acontece no celular. No emulador se conecta normalmente…

godinez

o servidor que vc conecta, é algum tipo de servidor interno ? que fica na empresa, ou na sua casa, sei lá!! Porque o emulador pode conseguir a conexao por estar na mesma rede, e se o servidor não estiver recebendo conexoes externas, isso nunca vai funcionar msm.
Faça uma conexão simples via HttpConnection, um ping pong basico rsrsrs, para verificar se é algum problema(limitação) do aparelho, servidor, etc…

L

Então o servidor fica na empresa, mas é um serviço que atende clientes externos. De casa também consigo conectar pelo emulador…
Obrigado!

P

lzoratto:
Consegui pegar a descrição do erro

Acontece na conexão com o servidor: javax.microedition.io.ConnectionNotFoundException:socket open: failed
Porém isso só acontece no celular. No emulador se conecta normalmente…

Mais um motivo para seguir o que eu já disse pra vc aqui:
http://www.guj.com.br/posts/list/30/197813.java#994810

L

Ok mas o fato de eu navegar pela internet e utilizar o msn tudo por este celular, não quer dizer que isso que falou para eu fazer esteja descartado certo? Tentar configurar a APN…

P

Se vc está conseguindo navegar então o problema não é APN.

Lembrei que vc pode receber esta exception se por exemplo o celular estiver sem sinal da operadora.

L

Acredito que também não seja esse o problema. Sempre que tento a conexão estou em uma rede privata com acesso wi fi…
Mesmo assim sempre com bom sinal da operadora… A rede que tento fazer a conexão é a mesma que utilizo para conectar pelo emulador. Obrigado.

P

Desliga este wi-fi, meta a mão no bolso e garanta que está usando a rede da operadora para testar !

Tem que fazer teste né fio…se vc não fala nada estou entendendo que ainda não fez isto…

L

Vou fazer isso. Mas porque não funcionaria por wi fi e funcionaria pela operadora?

L

Testei pela rede da operadora também deu a mesma exception…

P

Aquela URL q vc usou no código deste post , é fictícia né…?!!

Tem certeza que ela não é daquele jeito no seu código real…???

L

Sim ela não é real. No emulador a conexão é perfeita, recebo os dados da url normalmente…

Criado 9 de fevereiro de 2010
Ultima resposta 22 de fev. de 2010
Respostas 50
Participantes 4