Я пишу программу, которая будет перемещать мышь на определенное расстояние в заданный период времени. Поэтому мне нужен алгоритм:
Нажмите «Пуск»
while(true){
move mouse to point x
sleep for n seconds
}
Что работает, но при запуске в виде потока кнопка запуска все еще нажата, потому что поток работает непрерывно. Поэтому я не могу даже выйти из этой программы (как и в случае с любым бесконечным циклом), и я не могу установить для логического значения значение «false», чтобы остановить цикл while. Что мне нужно сделать, чтобы этот поток мог работать в фоновом режиме и по-прежнему давал мне доступ, чтобы щелкнуть кнопку остановки и остановить движение мыши?
В моем основном классе у меня есть:
public void actionPerformed(ActionEvent e) {
if (e.getSource() == btnStart) {
Thread t = new Thread(new Mover(1000, true));
t.run();
}
}
Класс потока:
import java.awt.AWTException;
import java.awt.MouseInfo;
import java.awt.Robot;
public class Mover implements Runnable {
int time;
boolean startStop;
public Mover(int x, boolean b) {
time = x;
startStop = b;
}
@Override
public void run() {
while (startStop) {
// TODO Auto-generated method stub
//Get x position
int intX = MouseInfo.getPointerInfo().getLocation().x;
// String intx = Integer.toString(intX);
//Get y position
int intY = MouseInfo.getPointerInfo().getLocation().y;
Robot robot;
try {
robot = new Robot();
robot.mouseMove(intX - 100, intY);
} catch (AWTException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
Thread.sleep(time);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}// Close while loop
}
}
equals(Object)
для сравнения объектов, потому что использование==
может привести к неожиданным результатам. - person Josh M   schedule 14.08.2013start()
для запуска темы, а неrun()
. - person qqilihq   schedule 14.08.2013