私は JWindow と JFrame を両方とも実行可能にし、両方ともマウスリスナーを実装しています。私は自分のプロジェクトのために多くのテストを行う必要があり、それを簡素化するために、そのほとんどを自動化できるようにしたいと考えているため、独自のマウスレコーダーとリプレーヤー (Java Robot クラスを使用) を開始しました。
単純化された AutoHotKey や AutoIt のようなものですが、Windows マシンだけでなく、Ubuntu マシンでも動作します!!!
私が作成した 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の閉じるボタンをクリックしたり、フレーム内でクリックしたりしても、すべてのアクションが完全に再生されるまで終了しませんか?
私が疑問に思ったことの 1 つは、スレッドを実行し続けるものは何なのかということです。したがって、System.out.println(""); スレッドが死ぬ?だから私はそれらの周りでwhileループを試み、私のアプリケーションは正常に印刷されました
GUI GUI GUI RECORDER RECORDER GUI RECORDER など
したがって、それらのスレッドが同時に実行されていることがわかります...実行外の他のすべてのアクションが実行されないように見えるだけです...マウスリスナーなどをスレッド実行に含めるにはどうすればよいですか?