我有一个 JWindow 和一个 JFrame 都可以运行,并且都实现了鼠标侦听器。我要为我的一个项目做很多测试,为了简化它,我希望能够自动化其中的大部分,所以我开始了自己的鼠标记录器和回放器(使用 Java 机器人类)。
有点像简化的 AutoHotKey 或 AutoIt 的东西......但它会在我的 Ubuntu 机器以及我的 Windows 机器上运行!!!
我制作的 JWindow 是半透明的,覆盖了整个屏幕,当您单击它时它会消失并重播对后面对象的单击然后重新出现。这就是录音过程。当用户右键单击时,设置为不可见并重播记录的操作。
在重播期间,我希望该选项能够退出整个应用程序,因此我认为最好的方法是让 JFrame 和 JWindow 可运行。
JFrame 只是他们从应用程序中提供一个关闭选项。
所以,在我的主要课程中,我有
public static void Main(String[] args){
recorder = new Recorder();
gui = new GUI();
Thread tr = new Thread(recorder);
Thread tg = new Thread(gui);
tr.setName("Recorder");
tg.setName("GUI");
tr.start();
tg.start();
}
我的理解是 Recorder 和 GUI 是可运行的对象,它们通过新的 Thread 命令制成线程。当我使用 .start() 时,我开始执行线程,系统从这里决定在任何特定时间运行哪个线程。
到 Recorder 和 GUI 类。
public class Recorder
implements Runnable, MouseListener {
//Constructor and other code
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1) {
//Record events
}else{
//Replay events
}
System.exit(0);
}
public void run() {
System.out.println("Recorder");
}
}
public class GUI
implements Runnable, MouseListener {
//Constructor, simply constructs JFrame and sets mouselistener to it
public void mouseClicked(MouseEvent e) {
System.exit(0);
}
public void run() {
System.out.println("GUI");
}
}
我的应用程序打印出 Recorder,然后 GUI 允许我记录我的事件,然后右键单击 JWindow 以重播它们...
但是当我单击 JFrame 的关闭按钮甚至在框架中单击鼠标侦听器时,它不会退出,直到所有操作都完全重播?
我确实想知道的一件事是我在运行中投入了什么是什么使线程保持运行?所以当 System.out.println(""); 被执行的线程死了?所以我在它们周围尝试了一个while循环,我的应用程序成功打印了
GUI GUI GUI RECORDER RECORDER GUI RECORDER 等
所以我可以看到它们的线程正在同时运行......只是运行之外的所有其他操作似乎都没有被执行......如何在线程执行中包含我的鼠标侦听器等?