Netbeans não deixa encerrar processo

Estou criando um auto click, ele basicamente está pronto, porem para eu encerrar o processo eu tenho que ir em gerenciador de tarefas.
Eu criei uma interface grafica com botoes para configura-lo.
Fiz um botão de iniciar o processo (funciona perfeitamente) e um botão de parar o processo.
Porem esse botão de parar o processo, não funciona, pois quando o programa e executado, a interface fica inacessivel, nao consigo clickar em nada, ele tipo que desabilita, não sei se é algo padrão do netbeans, e mesmo que eu aperte no “X” ele não fecha, só quando o programa não é executado.
Alguem sabe se tem como arrumar isso ? ou alguma outra solução ? agradeço.

Vc deve iniciar o processo numa thread separada, pois se usar a thread principal, a janela ficará congelada. Isso acontece pq a thread que está executando a janela, estará ocupada fazendo outra coisa.

1 curtida

consegue me explicar como faço outra thread separada ? não faço ideia, ou algum link explicativo agradeço essa infomação, já foi meio caminho andado <3

Dê uma lida nesse artigo da Alura: Threads em Java 1: Programação paralela | Alura Cursos Online

A ideia é vc criar uma classe que será o que vai ser executada pela thread. Essa classe deve implementar a interface Runnable.

Depois, vc deve iniciar a thread para que sua lógica seja executada:

Thread t = new Thread(new ClasseCriadaRunnable());
t.start();
1 curtida

Essas são minhas classes.
No main menu tem uma interface com um botão iniciar.
Eu criei uma classe chamafda Executar 1080p lá está o codigo do autoclick.
Classes

Eu implementei o metodo runable (não sei se esta correto) porem não uncionou quando eu
aperto o botão iniciar.

aqui está como eu coloquei no botão que está na classe principal MainMenu.
obs: o autoclick funciona apenas quando eu coloco o script dentro do botão.
Parece que tem algo errado no codigo ou está faltando algo.


Consegue me ajudar, ver se eu fiz algo de errado ?

Posta o código da sua classe pra gente ver.

Não a imagem. Sempre que puder, poste o código mesmo

ele funciona apenas se eu colocaro codigo diratamente no botão iniciar.
(sim sou iniciante e a forma que eu faço e feia aindakk)
na imagem tem a forma que coloquei no botão.
mudei o nome da classe para TesteIniciar

public class TetsteIniciar implements Runnable {
MainMenu menu = new MainMenu ();
@Override
public void run() {

    //CONDIÇÕES DE FUNCIONAMENTO
    try {

        Robot robo = new Robot();
        //tempo do click
        String timeClick = menu.clickDelay.getSelectedItem().toString();
        int convertClick = Integer.parseInt(menu.clickDelay.getSelectedItem().toString());
        robo.setAutoDelay(convertClick);
        int mimir = 78000 ;

        //tempo do descanso
        String descansoTime = menu.timeDescanso.getSelectedItem().toString();
        int convertDescanso = Integer.parseInt(menu.timeDescanso.getSelectedItem().toString());
        
        
    //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    //INICIAR 1080p
        if (menu.res1080p.isSelected()){
            for (;;) {

                //TRABALHAR
                robo.mouseMove(1800,950);
                robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                robo.mouseMove(680, 280);
                robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                robo.mouseMove(980, 180);
                robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                robo.mouseMove(980, 380);
                robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                Thread.sleep(10000);

                //USUARIO SELECECIONA TEMPO
                for(int x = 1; x <= convertDescanso ; ++x){

                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                    //CLICK DESCONECT
                    for (int Y =0; Y <=1; ++Y ){
                        //FASE1
                        robo.mouseMove(900, 730);
                        robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                        robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                        //FASE2
                        robo.mouseMove(900, 890);
                        robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                        robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                        //FASE3
                        robo.mouseMove(1840, 540);
                        robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                        robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                        //FASE4
                        robo.mouseMove(980, 380);
                        robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                        robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                    }
                    //DESCANCO 1 MINUTOS
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                    Thread.sleep(mimir);

                    //ANTIDESCONECT
                    //SAI
                    robo.mouseMove(40, 60);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                    //ENTRA
                    robo.mouseMove(980, 380);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                    Thread.sleep(10000 );

                    //SAI
                    robo.mouseMove(40, 60);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                    //ENTRA
                    robo.mouseMove(980, 380);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                    //FASE1
                    robo.mouseMove(900, 730);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                    //FASE2
                    robo.mouseMove(900, 890);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                    //FASE3
                    robo.mouseMove(1840, 540);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);
                    //FASE4
                    robo.mouseMove(980, 380);
                    robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                    robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

                }
                // voltar menu principal
                robo.mouseMove(40, 60);
                robo.mousePress(InputEvent.BUTTON1_DOWN_MASK);
                robo.mouseRelease(InputEvent.BUTTON1_DOWN_MASK);

            }
        }
        
        //XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    
    
    
    
    
    
    
}   catch (InterruptedException ex) {
        Logger.getLogger(TetsteIniciar.class.getName()).log(Level.SEVERE, null, ex);
    } catch (AWTException ex) {
        Logger.getLogger(TetsteIniciar.class.getName()).log(Level.SEVERE, null, ex);
    }

}
}

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

    Thread ThereadIniciar = new Thread (new TetsteIniciar());
    ThereadIniciar.run();

uma imagem para ter noção do que eu estou fazendo, preciso que o botão parar funcione em quanto o progama roda no loop infinito.

image

Para disparar a Thread tem que chamar o método start() mas você está chamando o método run().

Esse erro não tem necessariamente nada a ver com o “NetBeans não deixa encerrar o processo”

sim, me expressei errado no titulo. vou arrumar

tambem não funcionou.
Acho que não existe a resposta pra isso kkkk :l

Tem certeza de que sua Thread não está manipulando a instância errada de MainMenu?

Posta o fonte completo do TetsteIniciar e do MainMenu

package bomberclickv2;

import ResoluçõesGo.Executar1080;
import ResoluçõesGo.testeExecut;
import TempoDescanso.TempoDescanso;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MainMenu extends javax.swing.JFrame {
  
  public MainMenu() {
    initComponents();
  }
  
  @SuppressWarnings("unchecked")
  // <editor-fold defaultstate="collapsed" desc="Generated Code">
  private void initComponents() {
    iniciar = new javax.swing.JButton();
    sair = new javax.swing.JButton();
    delayClick = new javax.swing.JComboBox<>();
    tempoDescanso = new javax.swing.JComboBox<>();
    janela1080p = new javax.swing.JRadioButton();
    janela720p = new javax.swing.JRadioButton();
    
    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    iniciar.setText("INICIAR");
    iniciar.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        iniciarActionPerformed(evt);
      }
    });

    sair.setText("SAIR");
    sair.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        sairActionPerformed(evt);
      }
    });

    delayClick.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        delayClickActionPerformed(evt);
      }
    });

    tempoDescanso.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        tempoDescansoActionPerformed(evt);
      }
    });

    janela1080p.setText("1080p");
    janela1080p.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
        janela1080pActionPerformed(evt);
      }
    });
    
    janela720p.setText("720p");
    
    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    
    layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
          .addGap(40, 40, 40)
          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
            .addComponent(delayClick, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(iniciar))
          .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 170, Short.MAX_VALUE)
          .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(sair, javax.swing.GroupLayout.Alignment.TRAILING)
            .addComponent(tempoDescanso, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
          .addGap(60, 60, 60))
      .addGroup(layout.createSequentialGroup()
        .addGap(143, 143, 143)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
          .addComponent(janela720p)
          .addComponent(janela1080p))
        .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
    );
    
    layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
        .addContainerGap(86, Short.MAX_VALUE)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
            .addComponent(delayClick, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addComponent(tempoDescanso, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        .addGap(18, 18, 18)
        .addComponent(janela1080p)
        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
        .addComponent(janela720p)
        .addGap(13, 13, 13)
        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
          .addComponent(iniciar)
          .addComponent(sair))
        .addGap(79, 79, 79))
    );
    
    pack();
  }// </editor-fold>                        
  
  private void janela1080pActionPerformed(java.awt.event.ActionEvent evt) {

  }                                           
  
  private void tempoDescansoActionPerformed(java.awt.event.ActionEvent evt) {
    String quinze_min = "3";
    this.tempoDescanso.addItem(quinze_min);

    String quarenta_min = "6";
    this.tempoDescanso.addItem(quarenta_min);

    String uma_hora_meia = "9";
    this.tempoDescanso.addItem(uma_hora_meia);
  }                                             
  
  private void delayClickActionPerformed(java.awt.event.ActionEvent evt) {
    String um = "1000";
    this.delayClick.addItem(um);

    String dois = "2000";
    this.delayClick.addItem(dois);

    String tres = "3000";
    this.delayClick.addItem(tres);
  }
  
  private void iniciarActionPerformed(java.awt.event.ActionEvent evt) {
    Thread ThreadIniciar = new Thread (new Executar1080());
    ThreadIniciar.start();
  }
  
  private void sairActionPerformed(java.awt.event.ActionEvent evt) {
    System.exit(0);
  }
  
  public static void main(String args[]) {
    //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
    /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
     * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
     */
    try {
      for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
        if ("Nimbus".equals(info.getName())) {
          javax.swing.UIManager.setLookAndFeel(info.getClassName());
          break;
          }
        }
      } catch (ClassNotFoundException ex) {
        java.util.logging.Logger.getLogger(MainMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (InstantiationException ex) {
        java.util.logging.Logger.getLogger(MainMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (IllegalAccessException ex) {
        java.util.logging.Logger.getLogger(MainMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      } catch (javax.swing.UnsupportedLookAndFeelException ex) {
        java.util.logging.Logger.getLogger(MainMenu.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
      }
      
      java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
          new MainMenu().setVisible(true);
        }
      });
    }

    // Variables declaration - do not modify                     
    public javax.swing.JComboBox<String> delayClick;
    public javax.swing.JButton iniciar;
    public javax.swing.JRadioButton janela1080p;
    private javax.swing.JRadioButton janela720p;
    public javax.swing.JButton sair;
    public javax.swing.JComboBox<String> tempoDescanso;
    // End of variables declaration

Sacanagem postar código sem formatar com o botão </>. :disappointed:

Faltou o fonte da classe Executar1080().

Me desculpe amigo kkkk, eu nunca postei nada em forum, e a primeira vez, pois eu estou tentando programar na raça sem tutorial estou utilizando tudo que aprendi e pesquisando como fazer.
Tento fazer da forma mais organizada possivel, mas eu sei que fica feio kkkk.
sou iniciante.
vou testar e volto aqui pra falar se funcionou.

como eu faria nessa caso pra chamar a fonte da classe Executar1080() ?

sinto que estou perto de resolver kkk, preciso de ajuda.

Eu quis dizer que faltou você postar o fonte da classe Executar1080.

Você só falou o problema mas não postou os fontes atualizados.