| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 02/02/2012 22:55:50
|
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á.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2012 07:40:41
|
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.
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2012 10:58:51
|
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?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2012 12:46:16
|
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.
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2012 13:01:13
|
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!
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2012 13:18:24
|
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:
|
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 03/02/2012 21:20:11
|
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.
|
|
|
 |
|
|