Dúvida! Loop While travando JButton

Bom dia

Antes de postar tentei localizar alguma dúvida parecida. Encontrei algumas coisas parecidas, ate tentei realizar os procedimentos descritos pelos colegas porém sem sucesso.

Minha dúvida é a seguinte.

Criei um pequeno aplicativo que com um loop infinito para executar arquivo .bat, porém quando clico no botão INICIAR, este fica pressionado e trava o aplciativo, o BAT executa como eu planejei. Tentei usar Threads mas não obtive sucesso, se alguém puder me ajudar fico agradecido.

[code]public class Tela extends Thread{

private JButton btInicia = new JButton("INICIAR");
private JButton btPara = new  JButton("PARAR");

private JLabel jlTexto = new JLabel("SISTEMA EM STANDBY");

private JPanel painel1 = new JPanel(new BorderLayout());

private JFrame tela = new JFrame("Vigilante1.0");

public Tela(){
	btInicia.addActionListener(
			new ActionListener() {
				
				@Override
				public void actionPerformed(ActionEvent e) {
					jlTexto.setText("SISTEMA ATIVO");
					try{
						while (0==0){
							Runtime.getRuntime().exec("c://teste.bat");
							Thread.sleep(20000);
						}
					}catch (Exception e1) {
						// TODO Auto-generated catch block
						e1.printStackTrace();
					}
					
				}
			});
	
	painel1.add(btInicia, BorderLayout.SOUTH);
	painel1.add(btPara);
	painel1.add(jlTexto, BorderLayout.NORTH);

	tela.add(painel1);
	
	tela.setSize(200, 200);
	tela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	tela.setVisible(true);
}[/code]

use swingworker

como não obteve sucesso ? rsrs

public void actionPerformed(ActionEvent e) {    
			Thread thread = new Thread(){  
				public void run() {  


					jlTexto.setText("SISTEMA ATIVO");    
					try{    
						while (0==0){    
							Runtime.getRuntime().exec("c://teste.bat");    
							Thread.sleep(20000);    
						}    
					}catch (Exception e1) {    
						// TODO Auto-generated catch block    
						e1.printStackTrace();    
					}   


				}  
			};  
		}

while(0==0) ? Pq não usou o true ?

Bom dia magostta.

Eu tentei com while (true) mas deu na mesma, tentei outras variações tmb não funcionou hehehe ate uma vela de 7 dias já acendi. hehehe

Obrigado pela ajuda FUNCIONOU, porém o arquivo BAT não foi executado…agora acho que é so uma questão de ajuste

Acredito que você está fazendo errado a Thread, você está criando a tela como uma Thread, tudo bem, só que é uma única Thread pra tela toda, tens que criar uma específica pra ação do botão, tipo assim:

[code]
public void actionPerformed(ActionEvent e) {
jlTexto.setText(“SISTEMA ATIVO”);

                      Thread acao = new Thread(new Runnable(
                            public void run(){
                                  try{
                                         while (0==0){  
                                                Runtime.getRuntime().exec("c://teste.bat");  
                                                Thread.sleep(20000);  
                                         }
                                  }catch(Exception e1) {  
                                        // TODO Auto-generated catch block  
                                        e1.printStackTrace();  
                                   }  
                             }));  ...
                             acao.start();[/code]

Não sei se o código tá todo certo, não pude testar e escrevi direto aqui…
Podes também criar uma classe que implementa a classe Runnable, e criar tua Thread passando essa classe como parâmetro, assim:

Thread acao = new Thread(new classeQueImplementaRunnable());

Gurus do java, se eu estiver falando besteira, me corrijam!

Vou testar gaulix

Obrigado

Funcionou perfeitamente com o SwingWorker que o colega Marlon Meneses indicou.

[code]public class TesteSwing extends SwingWorker<Void, Void> {

public boolean controle = true; 

@Override  
protected Void doInBackground() throws Exception {  
	 try{      
         while (controle){      
             Runtime.getRuntime().exec("c:\\teste.bat");      
             Thread.sleep(20000);
         }      
     }catch (Exception e1) {      
    	 JOptionPane.showMessageDialog(null, "SISTEMA PARADO");     
         e1.printStackTrace();      
     }     
    return null;  
}  

@Override  
protected void done() {  
}  

}[/code]

Grato!! :smiley: