Domanda

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.

È stato utile?

Soluzione

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");

}
}

Altri suggerimenti

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) {

            }
        }   
    }        
} 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top