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,
}
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.
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.
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