JOptionpane não exibe mensagem após conexão do servidor e cliente por socket  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
DougZero
Smalltalk

Membro desde: 02/02/2012 22:32:46
Mensagens: 4
Offline

Olá,
é meu primeiro post no forum, mas aqui deixo uma duvida que não consigo resolver:
Fiz um programa e este funciona perfeitamente com exceção do JOptionpane. Meu programa funciona como um Skype usando a API Gstreamer para linux, mas entre dois computadores apenas. Todo processo funciona bem quando uso System.out.print() mas se eu tentar um JOptionpane, o box aparece assim como seu titulo, mas nenhuma mensagem ou botao aparece. Alem disso, metodos estanciados tbm não funcionam e acaba deixando meu programa funcional mas não como eu queria.

Abaixo, parte do codigo que tenho tido este problema:



JOptionpane ou qualquer metodo de qualquer outra classe não funcionam corretamente a partir de


qualquer linha acima, tudo funciona corretamente.

Alguem saberia ou teria uma ideia do porque? lembrando que o box do JOptionpane quando chamo aparece, mas a mensagem ou opçoes nao.

Obrigado desde já.
roger_rf
GUJ Master

Membro desde: 29/04/2009 07:40:19
Mensagens: 1091
Localização: Natal/RN
Offline

ServerSocket.accept() é um método bloqueante, ou seja, travará a thread em que for executado até que uma conexão seja realizada.

Para que seu programa possa fazer outras coisas enquanto a conexão não se realiza, execute ServerSocket.accept() numa thread em separado.

DougZero
Smalltalk

Membro desde: 02/02/2012 22:32:46
Mensagens: 4
Offline

Entendo...


mas me veio uma pergunta. Neste meu codigo, após haver a conexão o tal do "Socketserver" que mencionei, ai sim começaria a realizar os metodos e threads que criei. Por exemplo: o server aguarda conexao do cliente, apoś estabelecida será trocado numeros inteiros e para cada um haverá um IF que realizará alguns comandos (ver a linha 42 do codigo). O server liga; o cliente conecta; o server recebe o numero 1 e chama o JOptionPane e o metodo rodar e devolve o numero 2 para o cliente; e assim vai ...

ServerSocket.accept() é um método bloqueante, ou seja, travará a thread em que for executado até que uma conexão seja realizada.


Nao entendo como isso afetaria o restante do programa levando em consideração de que a conexão ja foi realizada... como proceder?
roger_rf
GUJ Master

Membro desde: 29/04/2009 07:40:19
Mensagens: 1091
Localização: Natal/RN
Offline

Se você quiser dar suporte a apenas um cliente de cada vez, não há o que modificar no seu programa.

DougZero
Smalltalk

Membro desde: 02/02/2012 22:32:46
Mensagens: 4
Offline

Exatamente, um cliente de cada vez, mas gostaria de fazer o metodo criar.Rodar de uma outra classe e o JOptionPane funcionarem dentro do IF da linha 42... o metodo faz tudo, só nao executa a thread dele e o JOptionPane cria uma janela só com titulo e sem mensagem ou opção. Meu grande problema é justamente esses dois. Arrumando isso, tudo estaria perfeito!
roger_rf
GUJ Master

Membro desde: 29/04/2009 07:40:19
Mensagens: 1091
Localização: Natal/RN
Offline

Talvez seja questão de você estar usando JOptionPane fora da thread do Swing. Experimente usar JOptionPane na linha 42 da seguinte forma:


DougZero
Smalltalk

Membro desde: 02/02/2012 22:32:46
Mensagens: 4
Offline

Agradeço a sua atenção.

usando InvokeAndWait nao deu certo, fiz dessa maneira e funcionou, mas trouxe outro probleminha:



o meu novo problema é o


que está fora do SwingUtilities. Se eu deixar como está os metodos do if (recebendoChamada ==1) irao funcionar corretamente, mas será enviado o valor que eu quero para o cliente sem antes esperar que eu responda se quero ou nao aceitar a chamada, ou seja, ele passa para as proximos IFs sem antes esperar eu terminar o primeiro que tem o JOptionPane perguntando se quero ou nao aceitar a chamada. Assim, esse botao se torna inutil.

Ai tem outro porem... seu colocar o


dentro do SwingUtilities,o netbeans me obriga a seta-lo como final e fazndo isso o restante nao funciona.

Tudo que eu preciso eh que apareça o JOptionPane pergutnando e ao selecionar a opção ele execute os metodos e enviaria um valor inteiro para o cliente. Ideias?

Desde já agradeço.
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team