Ajuda com este código que não funciona

Boa noite senhores, sou novo no fórum e me inscrevi justamente porque precisava de ajuda com um código que estou fazendo:
Eu estou criando um Autotab compatível com Linux, que é basicamente um programa que fica dando tab entre as páginas sozinho a cada 20 secs, e eu escrevi todo esse código, ele roda e tudo mais, mas ele não funciona, simplesmente não faz nada.
O código é esse:
import java.awt.Robot;
import java.awt.event.;
import java.awt.AWTException;
import javax.swing.
;
import java.awt.Color;
import java.awt.Button;
import java.awt.Label;

public class Main implements ActionListener{

boolean isRunning = true;
boolean isOn = false;
Button ligaDesliga;
JFrame frame;
Label rotuloStatus,status;


public void janela() {
	ligaDesliga = new Button("Ligar/Desligar");
	frame = new JFrame("Autotab");
	rotuloStatus = new Label("Status:");
	status = new Label("Desligado");
	
	frame.setVisible(true);
	frame.setResizable(false);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	frame.setSize(220,150);
	frame.setBackground(new Color(27, 44, 63));
	frame.setLayout(null);
 
	ligaDesliga.setBounds(0,60,205,50);
	ligaDesliga.setBackground(new Color(200,200,200));
	ligaDesliga.addActionListener(this);

	rotuloStatus.setBounds(0,0,40,20);
	status.setBounds(45,0,100,20);
	
	frame.add(ligaDesliga);
	frame.add(rotuloStatus);
	frame.add(status);
}

public static void main(String[] args) throws AWTException{

Robot robot = new Robot();
Main main = new Main();
main.janela();

while(main.isRunning) {
	while(main.isOn){
		robot.delay(20000);
		robot.keyPress(KeyEvent.VK_ALT);
		robot.keyPress(KeyEvent.VK_TAB);
		robot.keyRelease(KeyEvent.VK_ALT);
		robot.keyRelease(KeyEvent.VK_TAB);
	}
}

}

public void actionPerformed(ActionEvent e) {
	if(isOn) {
		isOn = false;
		status.setText("Desligado");
	}else if(isOn == false) {
		isOn = true;
		status.setText("Ligado");
	}
}

}

Caso alguém consiga descobrir o motivo do programa não fazer nada, eu agradeço :smiley:

Tá funcionando:

image

import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class Main extends javax.swing.JFrame {

    private volatile boolean status_automacao = false;
    private Robot robot;

    public Main() {
        iniciarComponentes();
    }

    @SuppressWarnings("unchecked")
    private void iniciarComponentes() {
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        button_action1 = new javax.swing.JButton();
        status_lbl = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jPanel1.setBackground(new java.awt.Color(255, 255, 255));
        jPanel1.setLayout(null);

        jLabel1.setBackground(new java.awt.Color(0, 0, 0));
        jLabel1.setFont(new java.awt.Font("Ubuntu", 0, 24)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(0, 0, 0));
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Status");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(0, 30, 300, 30);

        button_action1.setBackground(new java.awt.Color(0, 0, 0));
        button_action1.setForeground(new java.awt.Color(255, 255, 255));
        button_action1.setText("Ativar");
        button_action1.addActionListener((java.awt.event.ActionEvent evt) -> {
            clickButtonAction(evt);
        });
        jPanel1.add(button_action1);
        button_action1.setBounds(100, 110, 110, 30);

        status_lbl.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        status_lbl.setText("Desativado");
        jPanel1.add(status_lbl);
        status_lbl.setBounds(0, 60, 300, 30);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        setSize(new java.awt.Dimension(311, 203));
        setLocationRelativeTo(null);
    }

    public static void main(String args[]) {
        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 | InstantiationException | IllegalAccessException | javax.swing.UnsupportedLookAndFeelException ex) {
            ex.printStackTrace();
        }

        java.awt.EventQueue.invokeLater(() -> {
            new NewJFrame().setVisible(true);
        });
    }

    private void clickButtonAction(java.awt.event.ActionEvent evt) {
        if (!status_automacao) {
            status_automacao = true;
            status_lbl.setText("Ativado");
            button_action1.setText("Desativar");
            var thread = new Thread(() -> {
                run_automation();
            });
            thread.start();
        } else {
            status_automacao = false;
            status_lbl.setText("Desativado");
            button_action1.setText("Ativar");
        }
    }

    private void run_automation() {
        try {
            robot = new Robot();
            while (status_automacao) {
                System.out.println("iniciando...");
                robot.delay(500);
                robot.keyPress(KeyEvent.VK_ALT);
                robot.keyPress(KeyEvent.VK_TAB);
                robot.keyRelease(KeyEvent.VK_ALT);
                robot.keyRelease(KeyEvent.VK_TAB);
                System.out.println("finalizando...");
            }
        } catch (AWTException ex) {
            ex.printStackTrace();
        }
    }

    private javax.swing.JButton button_action1;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JLabel status_lbl;

}
2 curtidas

Olá amigo,

Testei seu código e ele deu um erro na linha 67, onde ele não encontrou o NewJFrame().setVisible().

Não seria new JFrame().setVisible?
Obrigado!

Opa. Eu acabei trocando o nome da classe direto aqui no site e esqueci de fazer a mudança desse trecho.

Faz o seguinte:

  java.awt.EventQueue.invokeLater(() -> {
      new Main().setVisible(true);
  });
1 curtida

Funcionou certinho, amigo!

Obrigado pela ajuda!

1 curtida