Bom dia a todos.
Eu tenho um probleminha meio chato para resolver.
Estou desenvolvendo um instalador para o sistema da empresa. O projeto é feito em Netbeans.
O mais “complicado” está feito, que seria a cópia dos .ZIP empacotados no JAR para o diretório do sistema, a descompactação dos mesmos e a execução da instalação silenciosa do PostgreSQL, Tomcat e Firefox, além da criação de atalhos e instalação de serviços/Daemon. O Installer funciona em Windows, Linux e Mac.
O programa em si não tem erros, o que me irrita é a tela do instalador.
Para entender o funcionamento dele:
O installer é um JFrame. Dentro dele, possuo um JPanel especializado em desenhar uma Imagem em toda a sua extensão (a imagem que fica ao fundo do Installer). Este Panel está formatado em cardLayout.
Os outros Panels dele são inseridos via código. Montei cada tela do Installer (JPanel) separadamente, sem utilizar o Matisse para inserir diretamente no meu CardLayout Panel. Estes panels são transparentes.
Alguns Panels possuem uma barra de Progresso. Estes panels implementam uma Interface que contém os métodos que possibilitam ao JPanel preencher a barra de progresso e exibir mensagens de instalação.
O processo de atualização da JProgressBar e a exibição das mensagens rodam em uma Thread. A cópia e a descompressão dos arquivos também são executadas em Thread.
O meu problema é: a tela fica completamente congelada, exibindo apenas a mensagem inicial passada a tela. A barra de progresso não fica animada, e a tela apenas se atualiza ao final do processo das operações de IO, no caso, a descompactação dos arquivos .ZIP.
Já tentei updateUI(), repaint(), update(getGraphics()) tanto do JPanel em exibição como da tela principal do Installer que possui a figura do fundo. Usando updateUI() na tela principal, consegui ao menos fazer com que a imagem de fundo apareça, mesmo que desfocada. Sem usar este artifício, a tela ficava branca.
Pode ser algum detalhe específico do Netbeans ou este problema é corriqueiro em interfaces Swing?
Agradeço desde já a ajuda.
PS.: se precisarem de algum trecho de código vou ter que montar algo bem simplificado, porque são muitas classes, e como o installer é multiplataforma, o código é meio extenso.