Finalizar o processamento do método

3 respostas Resolvido
M

Prezado (a);
Tenho um método que imprime uma sequencia de números quando clico no botão iniciar.
Em algum momento preciso finalizar este processamento apertando o botão de parar.
Como fazer para finalizar o processamento do método enquanto ele esta sendo executado ?
Exemplo:

private void conta()
    {   
     for(int fa=0;fa<=50000000;fa++)
     { 
      Integer.toString(fa);
      textArea1.append(String.format(" %02d\t ",fa));
      textArea1.append("\n");   
     }                
    }  
 private void jButtoniniciar(java.awt.event.ActionEvent evt)
 {                                         
    conta(); \chama o método
 } 
private void jButtonparar(java.awt.event.ActionEvent evt)
 {                                         
   Como fazer para finalizar o processamento do método enquanto ele esta sendo
   executado, 
}

3 Respostas

lvbarbosa

Dessa forma que você fez não vai funcionar, porque quando você clica no botão iniciar, a thread da UI trava enquanto estiver executando o método conta, e por causa disso a UI não vai processar nenhum outro evento (o click no botão parar, por exemplo).

Não é tão trivial fazer isso pra quem está começando, por uma série de motivos. Tem vários conceitos envolvidos. Estude um pouco sobre threads e interrupções, estado compartilhado, como funciona a thread principal da UI e como os eventos de UI são processados. Aí terá insumo para fazer de forma segura e elegante.

H

Muito provavelmente você teria que criar uma Thread que a declaração fosse global da sua tela, em um botão você daria o Run e na outra o Stop.

M
Solucao aceita

Após as sugestões, realizei um pesquisa e estudo e cheguei a este código que funcionou.

Bloco de Citação

public class teste extends javax.swing.JFrame

{

Entra roda;

public teste() {

initComponents();

roda = new Entra();

}

class Entra implements Runnable

{

boolean inicia = false;

public void run()

{

textArea1.append("\n");

inicia = true;

for(int i=0;i<=10000;i++)

{

if(inicia==false)

{

break;

}

Integer.toString(i);

textArea1.append(String.format(" %02d\t “,i));

textArea1.append(”\n");

}

}

public void stop()

{

inicia = false;

}

}

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {

if (evt.getSource() == jButton1){

Thread thread = new Thread(roda);

thread.start();

}

}

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {

if (evt.getSource() == jButton2){

roda.stop();

}

}> Bloco de Citação
Criado 26 de abril de 2020
Ultima resposta 2 de mai. de 2020
Respostas 3
Participantes 3