Question

So I have created a program which does the intended purpose of sending random keystrokes. Now I have implemented a very basic GUI with a Start/Stop button. The program is meant to run when the integer "running" is equal to 1. So I decided to make the button change the value of running from 0 to 1, starting the loop.

Here is the code:

public class AutoKeyboard extends JFrame {

public static int running = 0; // program will not run until this is 1
Random r = new Random();

public static int randInt(int min, int max) { // returns random number
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}

private JLabel label;
private JButton button;

public AutoKeyboard() {
setLayout(new FlowLayout());
label = new JLabel("Not Running");
add(label);


button = new JButton("Start");
add(button);

event f = new event();
button.addActionListener(f);
}


public class event implements ActionListener {

    public void actionPerformed(ActionEvent f) {
        label.setText("Running");
        System.out.println("Running");
        running = 1; // changes running to 1? but doesn't start the program?
}
}


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

AutoKeyboard gui = new AutoKeyboard();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setSize(180, 80);
gui.setVisible(true);
gui.setResizable(false);
gui.setTitle("Anti AFK");

    while (running == 1) { // if running is 1, do this
try { 

int delay = randInt(4864,7834); // 336415, 783410 15 97
Robot robot = new Robot(); 
int keypress = randInt(65, 86);

Thread.sleep(delay);
robot.keyPress(keypress);

} catch (AWTException e) { 
e.printStackTrace(); 
} 
} 
}
}

My problem is, whenever I press my JButton "Start" it doesn't seem to change int running to 1, and the program doesn't start. Whenever I change the int manually in the code, the program will work. So the problem is the JButton is not updating the variable. Why? I'm really confused.

Thanks everyone for reading.

Was it helpful?

Solution

give a try of this code

import java.awt.AWTException;
import java.awt.FlowLayout;
import java.awt.Robot;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class NewClass1 extends JFrame {

public int running; // program will not run until this is 1
Random r = new Random();
public void performtast(){
     while (running == 1) { // if running is 1, do this
try { 

int delay = randInt(4864,7834); // 336415, 783410 15 97
Robot robot = new Robot(); 
int keypress = randInt(65, 86);

Thread.sleep(delay);
robot.keyPress(keypress);

}       catch (InterruptedException ex) { 
            Logger.getLogger(NewClass1.class.getName()).log(Level.SEVERE, null, ex);
        } catch (AWTException e) { 
e.printStackTrace(); 
} 
}
}
public static int randInt(int min, int max) {
    // returns random number
    Random rand = new Random();
int randomNum = rand.nextInt((max - min) + 1) + min;
return randomNum;
}

private JLabel label;
private JButton button;

public NewClass1() {
setLayout(new FlowLayout());
label = new JLabel("Not Running");
add(label);


button = new JButton("Start");
add(button);

event f = new event();
button.addActionListener(f);
}


public class event implements ActionListener {
 @Override
    public void actionPerformed(ActionEvent f) {
        label.setText("Running");
        System.out.println("Running");
        running = 1; // changes running to 1? but doesn't start the program?
        performtast();
}
}




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

NewClass1 gui = new NewClass1();
gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
gui.setSize(180, 80);
gui.setVisible(true);
gui.setResizable(false);
gui.setTitle("Anti AFK");

}
}

OTHER TIPS

You have to inform your code that running made as 1

 running = 1; // changes running to 1? but doesn't start the program?

You are making 1 but not running the code after that.

what you have to do is

public void actionPerformed(ActionEvent f) {
        label.setText("Running");
        System.out.println("Running");
        running = 1; // changes running to 1? but doesn't start the program?
        //ok everything set, now do my task.
       //  now call the method here to do your task, which uses *running * 
}

There's no method to tell the program that it should run, something like checkForPaused().

public static void checkForPaused() {
    synchronized (GUI_INITIALIZATION_MONITOR) {
        while (isPaused()) {
            try {
                GUI_INITIALIZATION_MONITOR.wait();
            } catch (Exception e) {

            }
        }   
    }        
} 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top