У меня есть JWindow и JFrame, оба я сделал работоспособным, и оба реализуют слушатель мыши.У меня есть много тестов для моего проекта, и чтобы упростить его, я хочу иметь возможность автоматизировать большинство из них, поэтому у меня есть собственный рекордер и проигрыватель мыши (использует Java Robot Class).
Вроде как упрощенный AutoHotKey или AutoIt ... но он будет работать на моей машине с Ubuntu так же, как и на моей Windows !!!
Сделанное мной JWindow является прозрачным и покрываетвесь экран, когда вы нажимаете на него, он исчезает и воспроизводит щелчок на объект позади, а затем снова появляется.Это процесс записи.Когда пользователь щелкает правой кнопкой мыши по значку, установленному на невидимое, и записанные действия воспроизводятся.
Во время воспроизведения я хочу иметь возможность выхода из всего приложения, и поэтому я считаю, что лучший способ сделать это будетчтобы сделать JFrame и JWindow Runnable.
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, а затем графический интерфейс. Позволяет мне записывать мои события, затем щелкнуть правой кнопкой мыши на JWindow, чтобы воспроизвести их ...
, но затем, когда я нажимаю кнопку закрытия JFrame или даже в кадреиз-за слушателя мыши он не выйдет, пока все действия не будут полностью воспроизведены?
Одна вещь, которую я удивляюсь, это то, что когда я запускаю команду, что поддерживает поток?Поэтому когда System.out.println ("");выполняется поток умирает?Поэтому я попытался их обойти, и мое приложение успешно напечатало
GUI RECORDER RECIRE RECORER GUI RECORDER и т. Д. И т. Д.
Итак, я вижу, что они работают одновременно ... это просто таккажется, что все остальные действия за пределами цикла не выполняются ... Как я могу включить мой обработчик мыши и т. д. в выполнение потоков?