0

そこで、ランダムなキーストロークを送信するという意図された目的を実行するプログラムを作成しました。これで、開始/停止ボタンを備えた非常に基本的な GUI を実装しました。このプログラムは、整数 "running" が 1 に等しいときに実行されることを意図しています。そこで、ボタンで running の値を 0 から 1 に変更し、ループを開始することにしました。

コードは次のとおりです。

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(); 
} 
} 
}
}

私の問題は、JButton の「開始」を押すたびに int running が 1 に変更されないようで、プログラムが開始されないことです。コードで int を手動で変更するたびに、プログラムは機能します。問題は、JButton が変数を更新していないことです。なんで?私は本当に混乱しています。

読んでくれてありがとう。

4

3 に答える 3

0

checkForPaused() のような、実行する必要があることをプログラムに伝えるメソッドはありません。

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

            }
        }   
    }        
} 
于 2013-10-12T12:21:37.130 に答える
0

1 として実行されていることをコードに通知する必要があります。

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

1 その後、コードを作成していますが、実行していません。

あなたがしなければならないことは

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 * 
}
于 2013-10-12T12:17:43.247 に答える