Estou com algumas dúvidas relacionadas às Threads + JDialog, vou explicar algumas situações e gostaria de saber como aplicar para que funcione da maneira que eu preciso.
Atualmente tenho o seguinte:
Possuo um JFrame que contém dois JPanel, um deles é a barra de menu superior que possui alguns botões e o outro JPanel é o que eu chamo de desktop, pois é nele que vou atribuindo as telas específicas quando o usuário clica nos botões específicos, no primeiro JPanel que eu citei, que é a barra de menu superior e que está presente durante toda a aplicação e em toda e qualquer outra tela, possuo algumas Threads (Runnable) que fazem um “monitoramento” em saídas específicas de um CLP com o qual a minha aplicação se comunica, então dependendo do status de algumas dessas saídas que estão sendo monitoradas preciso abrir um JDialog com algumas informações, levando em consideração esse caso segue alguns pontos:
- Usando o JDialog com o parâmetro modal = true quando o mesmo ficar visível toda aplicação abaixo dele fica bloqueada, até mesmo o JFrame principal, então o usuário não pode fechar a aplicação sem que o JDialog seja "liberado".
- Usando o JDialog com o parâmetro modal = false e o setAlwaysOnTop(true) quando o mesmo fica visível toda a aplicação abaixo dele fica liberada, sendo que o usuário pode acessar outras telas clicando nos botões da tela abaixo do JDialog sem problemas nenhum.
Resumindo a minha necessidade, eu gostaria de uma junção dos dois pontos que citei acima, mais ou menos assim:
- A thread chama o JDialog e este fica visível bloqueando o acesso ao JPanel (desktop) que citei acima, mas o JPanel de menu superior e o JFrame ficam disponíveis, principalmente o JFrame, para que o usuário possa fechar a aplicação se necessário, sem ter que liberar o JDialog, como posso fazer isso?
Então, agora além desta dúvida, ainda tenho outra, neste JDialog que é aberto, nele eu tenho outra thread (Runnable) que também fica “monitorando” saídas específicas de um CLP, para que esse JDialog possa ser liberado/fechado certas saídas que estão sendo monitoradas precisam estar acionadas, senão o JDialog não pode sumir, além disso tenho neste JDialog alguns labels com a descrição destas saídas e um icon para quando elas estiverem liberadas e outro para quando está bloqueadas, esses icons são setados pela thread de acordo com a leitura que a mesma vai realizando no CLP, o que acontece é que ás vezes parece que que thread trava ou “se perde”, pois o JDialog e seus componentes ficam se modificando sem sentido e até mesmo já aconteceu de travar e não permitir mais sair, gostaria de saber o que posso estar fazendo de errado e o que seria o ideal neste caso.
Se caso não for possível entender da maneira que expliquei me coloco a disposição para eclarecer o que for necessário.
Desde já agradeço.
Fico no aguardo.
Att.