Java SDK 1.3以后實現了Robot類。此類用于為測試自動化、自運行演示程序和其他需要控制鼠標和鍵盤的應用程序生成本機系統輸入事件。Robot 的主要目的是便于 Java 平臺實現自動測試。
使用該類生成輸入事件與將事件發送到 AWT 事件隊列或 AWT 組件的區別在于:事件是在平臺的本機輸入隊列中生成的。例如,Robot.mouseMove 將實際移動鼠標光標,而不是只生成鼠標移動事件。
Robot中主要的鼠標和鍵盤控制方法有:
void keyPress(int keycode) 按下給定的鍵。
void keyRelease(int keycode) 釋放給定的鍵。
void mouseMove(int x, int y) 將鼠標指針移動到給定屏幕坐標。
void mousePress(int buttons) 按下一個或多個鼠標按鈕。
void mouseRelease(int buttons) 釋放一個或多個鼠標按鈕。
void mouseWheel(int wheelAmt) 在配有滾輪的鼠標上旋轉滾輪。
下面是一個簡單的示例
import java.awt.AWTException;
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
public class KeyController implements Runnable {
private Dimension dim;
private Robot robot;
private volatile boolean stop = false;
public KeyController() {
dim = Toolkit.getDefaultToolkit().getScreenSize();
System.out.println("computer imformation:\n" + "width:"+dim.width+"\theight:"+dim.height);
try {
robot = new Robot();
} catch (AWTException ex) {
ex.printStackTrace();
}
}
public void run() {
while(!stop) {
robot.mousePress(InputEvent.BUTTON1_MASK);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void stop() {
stop = true;
}
public static void main(String[] args) {
MouseController kc = new MouseController();
Thread kcThread = new Thread(kc);
System.out.println("Key Controller start");
kcThread.start();
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
kc.stop();
System.out.println("Mouse Controller stoped");
}
}
import java.awt.Dimension;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
public class KeyController implements Runnable {
private Dimension dim;
private Robot robot;
private volatile boolean stop = false;
public KeyController() {
dim = Toolkit.getDefaultToolkit().getScreenSize();
System.out.println("computer imformation:\n" + "width:"+dim.width+"\theight:"+dim.height);
try {
robot = new Robot();
} catch (AWTException ex) {
ex.printStackTrace();
}
}
public void run() {
while(!stop) {
robot.mousePress(InputEvent.BUTTON1_MASK);
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void stop() {
stop = true;
}
public static void main(String[] args) {
MouseController kc = new MouseController();
Thread kcThread = new Thread(kc);
System.out.println("Key Controller start");
kcThread.start();
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
e.printStackTrace();
}
kc.stop();
System.out.println("Mouse Controller stoped");
}
}