Robot beenden oder zerstören

xari

Mitglied
Hallo,

ich habe einen global KeyListener und auf Tastendruck starten mein Robot. Ich schaffe es nur nicht das dieser jetzt, nachdem ich die Taste los gelassen haben, sich beendet. Hilfe ;(

Java:
public void keyRobot() throws AWTException, InterruptedException {
		Robot r = new Robot();
		
		while (keyPressed
				&& (click1 || click2 || click3 || click4 || clickml || clickmr)) {
			if (click1) {
				double rnd = (double) ((Math.random()) * 105 + 80);
				r.keyPress(KeyEvent.VK_1);
				r.keyRelease(KeyEvent.VK_1);
				Thread.sleep((long) rnd);
			}
			if (click2) {
				double rnd = (double) ((Math.random()) * 105 + 80);
				r.keyPress(KeyEvent.VK_2);
				r.keyRelease(KeyEvent.VK_2);
				Thread.sleep((long) rnd);
			}
			if (click3) {
				double rnd = (double) ((Math.random()) * 105 + 80);
				r.keyPress(KeyEvent.VK_3);
				r.keyRelease(KeyEvent.VK_3);
				Thread.sleep((long) rnd);
			}
			if (click4) {
				double rnd = (double) ((Math.random()) * 105 + 80);
				r.keyPress(KeyEvent.VK_4);
				r.keyRelease(KeyEvent.VK_4);
				Thread.sleep((long) rnd);
			}
			if (clickml) {
				double rnd = (double) ((Math.random()) * 105 + 80);
				r.mousePress(InputEvent.BUTTON1_MASK);
				r.mouseRelease(InputEvent.BUTTON1_MASK);
				Thread.sleep((long) rnd);
			}
			if (clickmr) {
				double rnd = (double) ((Math.random()) * 105 + 80);
				r.mousePress(InputEvent.BUTTON2_MASK);
				r.mouseRelease(InputEvent.BUTTON2_MASK);
				Thread.sleep((long) rnd);
			}
		}
	}

Java:
	public void nativeKeyPressed(NativeKeyEvent e) {
		keyPressed = true;
		try {
			keyRobot();
		} catch (AWTException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (InterruptedException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}
 
jup, funktioniert. Danke 😉

Hab aber ein weiteres Problem.
Wenn ich jetzt die Leertaste drücke und gedrückt halte, während dessen dann eine andere Taste drücke und loslasse und dann die Leertaste loslasse kommt das bei mir im KeyReleased nicht an.

Also Leertaste gedrückt --> andere Taste drücken --> Leertaste loslassen.
Das ich die Leertaste loslasse kommt nicht an. Wieso ?
 
jup, funktioniert. Danke 😉
Wenn ich jetzt die Leertaste drücke und gedrückt halte, während dessen dann eine andere Taste drücke und loslasse und dann die Leertaste loslasse kommt das bei mir im KeyReleased nicht an.

Weniger Klavier auf der Tastatur spielen und dafür mehr programmieren 😀

Ändere es doch einfach ab das du nur 2 Tasten drücken musst anstatt
eine zu drücken(1), draufzubleiben, währenddessen du eine andere Taste(2) drücken musst
und dann wieder eine Taste loslässt(1). Ist doch auch nicht so Benutzerfreundlich,
auch wenn es nur für den eigenen Gebrauch programmiert ist (nehme ich an).
 
Zuletzt bearbeitet:
jup, funktioniert. Danke 😉

Hab aber ein weiteres Problem.
Wenn ich jetzt die Leertaste drücke und gedrückt halte, während dessen dann eine andere Taste drücke und loslasse und dann die Leertaste loslasse kommt das bei mir im KeyReleased nicht an.

Also Leertaste gedrückt --> andere Taste drücken --> Leertaste loslassen.
Das ich die Leertaste loslasse kommt nicht an. Wieso ?

Ahh, das war ein bisschen ungünstig formuliert 😳
Das Problem ist, wenn der Robot in der while schleife die Tasteneingaben macht, erkennt das Programm keine eingaben mehr die ich manuell mache, egal ob ich auf die Tastatur klicke oder auf die Maus.

Java:
public void nativeKeyReleased(NativeKeyEvent e)

Die Methode reagiert nur noch auf die Tastendrücke vom Robot.
 
Zuletzt bearbeitet:
Bin ein bisschen weiter 🙂
Das Programm erkennt die manuellen Eingaben. Nur kommen die stark verzögert an, da es noch die ganzen eingaben vom Robot abarbeitet.
 
Habs bisschen umgeschrieben und es funktioniert jetzt.
Allerdings soll jedes mal wenn der Robot eine Taste drückt, danach eine kleine Pause sein, bis er die nächste Taste drückt. Das wär super.
Thread.sleep(); ist dafür nicht geeignet. Schon probiert 🙂

Java:
public void nativeKeyPressed(NativeKeyEvent e) {
		if ((e.getKeyCode() == NativeKeyEvent.VK_SPACE && spaceKey)) {
			try {
				keyRobot();
			} catch (AWTException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			} catch (InterruptedException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
			}
		}
	}

public void keyRobot() throws AWTException, InterruptedException {
		Robot r = new Robot();

		if (click1) {
			r.keyPress(KeyEvent.VK_1);
			r.keyRelease(KeyEvent.VK_1);
		}
		if (click2) {
			r.keyPress(KeyEvent.VK_2);
			r.keyRelease(KeyEvent.VK_2);
		}
		if (click3) {
			r.keyPress(KeyEvent.VK_3);
			 r.keyRelease(KeyEvent.VK_3);
		}
		if (click4) {
			r.keyPress(KeyEvent.VK_4);
			r.keyRelease(KeyEvent.VK_4);
		}
		if (clickml) {
			r.mousePress(InputEvent.BUTTON1_MASK);
			r.mouseRelease(InputEvent.BUTTON1_MASK);
		}
		if (clickmr) {
			r.mousePress(InputEvent.BUTTON2_MASK);
			r.mouseRelease(InputEvent.BUTTON2_MASK);
		}
	}
 
Zuletzt bearbeitet:

Zurück
Oben