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.
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();
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.
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.
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 </>
.
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.