# java Schleife beenden per Tastendruck



## TheSorm (14. Sep 2013)

Dieses Programm ist für Cookie klicker ein spiel in dem einfach auf die stellen aus dem code geklickt werden muss. An sich weiß ich wie ich die for schleife beenden könte, indem ich "if (Tasteneingabe = esc) { i = n+i} " in die schleife schreib.Das problem ist ich weiß nich wie es hinbekomme das ich in der schliefe auch noch tastatur abfrage drin habe? (und ja ich weiß das die shcleife sonst unendlcih leuft das soll sie ja auch bis ein tastendruck sie beendet.)


```
import java.awt.*;
import java.awt.event.*;
import java.io.*;


public class keeks{

    public void back(int a)
    {

    }


   public static void main(String[] args) throws IOException, AWTException{
        final Robot robot = new Robot();
        int i = 0;
        int n = 2000;
        while (i<n)
        {
            robot.mouseMove(281,500);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,800);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,750);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,700);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,650);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,600);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,570);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,540);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,510);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,480);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,440);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,410);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,380);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.mouseMove(1620,350);
            robot.mousePress(InputEvent.BUTTON1_MASK);
            robot.mouseRelease(InputEvent.BUTTON1_MASK);
            robot.delay(2);
            n++;
            i++;
        }
   }
}
```


----------



## Loud Silence (14. Sep 2013)

Ich verstehe nicht ganz, was dein Problem ist. Willst du einen Mechanismus, um das Programm vorzeitig zu beenden? Deine Schleife läuft nicht unendlich sonder nur bis i = 2000 ist.
Um das Programm vorzeitig zu beenden, reicht es nach einer gültigen Tasteneingabe (z.B Esc) ein 
"break;" auszugeben. Das beendet die Schleife.


----------



## TheSorm (14. Sep 2013)

doch unendlichw weil n nicht 2000 bleibt sondern auch immer +1 gerechnet wird  und wie mach ich das mit der gültigen eingabe das funktionirt da ergendwie nicht ?!


----------



## Loud Silence (14. Sep 2013)

Richtig.
Allgemein werden Tasteneingaben via Scanner eingelesen.

```
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.Scanner;
 
public class keeks{

 public static void main(String[] args) throws IOException, AWTException{
        final Robot robot = new Robot();
        Scanner sc = new Scanner(System.in);
        int i = 0;
        int n = 2000;
        String input = sc.next();
        while (i<n)
        {

               Dein Zeug...




            if (input == "Ende"){
                break;
            }

            n++;
            i++;
        }
   }
}
```

Außerdem versteh ich nicht warum du beide Zahlen hochzählst.
Wenn du eine loop-Schleife willst reicht while (true){}.


----------



## TheSorm (14. Sep 2013)

ja das mit i und n ist unnötig ahb icha uch schon bemerkt  das problem bei deim code ist nur das es nicht funktionirt also die maus klicks nicht ausgefürt werde?


----------



## anti-held (16. Sep 2013)

Ich hoffe ich hab das richtig verstanden.

Also damit du das beenden kannst, musst du auf jeden Fall mit Threads arbeiten.

Hab mal kurz ein kleines Programmchen geschrieben(nicht schön, aber tuts für deinen Bedarf):


```
import java.awt.BorderLayout;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Robot extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private static final int DURCHLAEUFE = 10;
	private static final int DELAY = 5;
	private static final int KLICKZEIT = 500;
	
	private JButton startButton = new JButton("start");
	private Klicker klicker = null;

	public static void main(String[] args) {
		new Robot().setVisible(true);
	}
	
	public Robot() {
		super("Botot");
		setSize(150, 100);
		setAlwaysOnTop(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationByPlatform(true);
		startButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				if (startButton.getText().equals("start")) {
					startButton.setText("stop");
					klicker = new Klicker();
					klicker.start();
					System.out.println("Klicker gestartet.");
				} else {
					klicker.interrupt();
					klicker = null;
				}
			}
		});
		getContentPane().add(startButton, BorderLayout.CENTER);
	}


	private class Klicker extends Thread {

		@Override
		public void run() {
			doKlicks();
			startButton.setText("start");
			System.out.println("Klicker finished.");
		}

		void doKlicks() {
			try {
				final java.awt.Robot robot = new java.awt.Robot();
				int n = 0;
				Point position = MouseInfo.getPointerInfo().getLocation();
				while (true) {
					robot.setAutoDelay(DELAY);
					robot.mouseMove(281, 500);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 800);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 750);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 700);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 650);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 600);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 570);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 540);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 510);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 480);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 440);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 410);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 380);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					robot.mouseMove(1620, 350);
					robot.mousePress(InputEvent.BUTTON1_MASK);
					robot.mouseRelease(InputEvent.BUTTON1_MASK);
					n++;
					if (n % DURCHLAEUFE == 0) {
						robot.mouseMove((int) position.getX(), (int) position.getY());
						Thread.sleep(KLICKZEIT);
					}
				}
			} catch (Exception ex) {
				System.out.println("Klicker abgebrochen.");
			}
		}
	}
}
```

nun die Erklärung:
Da du wenn du in einem anderen Fenster klicks ausführst, diese den Focus haben, bekommst du die Tastendrücke nicht mit!

Mein Programm erstellt dir ein kleines Fenster mit einem Button.
Wenn du auf start klickst, führt er deinen Code aus(die klicks die du wolltest!)
Nach der Anzahl, die du in der statischen Variable DURCHLÄUFE festlegst, macht er eine kurze pause.
Die Länge der Pause legst du in der Variable KLICKZEIT in Millisekunden fest (500 = 1/2 Sekunde)
In dieser Zeit steht der Mauszeiger wieder über dem nun stop genanntem Button.
Wenn du klickst hört er auf.
Andernfalls, macht er weiter.
Mit der Variable DELAY legst du ein allgemeines DELAY zwischen den Maus-moves und Klicks fest.
So kannst du die Klicks sehen.
Solltest du die DURCHLÄUFE erhöhen, solltest du die KLICKZEIT auch erhöhen.


----------



## TheSorm (16. Sep 2013)

Oh danke sehr nett  endlich mal jemand der mir hilft ohne mir zu sagen wie doof ich bin  (also so waren die auf gutefrage drauf  )


----------



## TheSorm (16. Sep 2013)

hätte noch eine farge  wie frag ich ab wo ein klick von einer maus war also so das ich das dann in einer koordinate in int abspeichern kann ?


----------



## TheSorm (16. Sep 2013)

Also ich habe jetzt hinzugefügt das man einen int wert eingeben kann. Es soll jetzt so laufen das man erst die zahl der klick positionen eingiebt also zb man will 9 punkte auf dem bilkdschirm die immer angeglickt werden dan giebt man 9 ein. So jetzt soll eine abfrage kommen für jeden punkt das der benutzer auf jeden punkt klicken muss die benutzt werden sollen und dann sollen diese durch robot immer wieder angeklick werden.

```
import java.awt.BorderLayout;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;

public class Robot extends JFrame {

    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private static final int DURCHLAEUFE = 10;
    private static final int DELAY = 5;
    private static final int KLICKZEIT = 500;
    
    private int[] KLICKPOSITION; 

    private JTextField numberField= new JTextField();
    private JButton startButton = new JButton("start");
    private Klicker klicker = null;

    public static void main(String[] args) {
        new Robot().setVisible(true);
    }

    public Robot() {
        super("Botot");
        setSize(150, 100);
        setAlwaysOnTop(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationByPlatform(true);
        startButton.setVisible(false);
        numberField.setBounds(0, 0, 150, 100);
        numberField.setText("");
        
        numberField.addActionListener(new ActionListener() {
        	public void actionPerformed(ActionEvent e) {
        			int input = Integer.parseInt(numberField.getText());
                    System.out.println("Zahl eingegeben."+input);
        		
        		if (!(numberField.getText() == null)) {
        			startButton.setVisible(true);
        			numberField.setVisible(false);
        		}
        	}
        });
        getContentPane().add(numberField, BorderLayout.CENTER);
        
        
    
        
        startButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if (startButton.getText().equals("start")) {
                    startButton.setText("stop");
                    klicker = new Klicker();
                    klicker.start();
                    System.out.println("Klicker gestartet.");
                } else {
                    klicker.interrupt();
                    klicker = null;
                }
            }
        });
        getContentPane().add(startButton, BorderLayout.CENTER);
    }


    private class Klicker extends Thread {

        @Override
        public void run() {
            doKlicks();
            startButton.setText("start");
            System.out.println("Klicker finished.");
        }
        

        void doKlicks() {
            try {
                final java.awt.Robot robot = new java.awt.Robot();
                int n = 0;
                Point position = MouseInfo.getPointerInfo().getLocation();
                while (true) {
                    robot.setAutoDelay(DELAY);
                    robot.mouseMove(281, 500);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 800);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 750);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 700);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 650);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 600);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 570);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 540);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 510);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 480);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 440);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 410);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 380);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    robot.mouseMove(1620, 350);
                    robot.mousePress(InputEvent.BUTTON1_MASK);
                    robot.mouseRelease(InputEvent.BUTTON1_MASK);
                    n++;
                    if (n % DURCHLAEUFE == 0) {
                        robot.mouseMove((int) position.getX(), (int) position.getY());
                        Thread.sleep(KLICKZEIT);
                    }
                }
            } catch (Exception ex) {
                System.out.println("Klicker abgebrochen.");
            }
        }
    }
}
```


----------



## anti-held (17. Sep 2013)

```
import java.awt.BorderLayout;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;

public class Robot2 extends JFrame {
	/** * */
	private static final long serialVersionUID = 1L;
	private static final int DURCHLAEUFE = 10;
	private static final int DELAY = 15;
	private static final int KLICKZEIT = 750;
	private List<Point> positions = new ArrayList<Point>();
	private JButton record = new JButton("record");
	private JButton startButton = new JButton("start");
	private Klicker klicker = null;

	public static void main(String[] args) {
		new Robot2().setVisible(true);
	}

	public Robot2() {
		super("Bot");
		setSize(150, 100);
		setAlwaysOnTop(true);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setLocationByPlatform(true);
		record.addKeyListener(new KeyAdapter() {
			public void keyPressed(KeyEvent e) {
				switch (e.getKeyCode()) {
				case KeyEvent.VK_F5:
					Point newPoint = MouseInfo.getPointerInfo().getLocation();
					positions.add(newPoint);
					System.out.println(newPoint + " added.");
					break;
				case KeyEvent.VK_ESCAPE:
					init();
					break;
				default:
				}
			}
		});
		record.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent e) {
				System.out.println("now press on every location you want to have a klick, f5.");
				System.out.println("if u got every point, press esc.");
			}
		});
		getContentPane().add(record, BorderLayout.CENTER);
		pack();
	}

	private void init() {
		getContentPane().remove(record);
		startButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (startButton.getText().equals("start")) {
					startButton.setText("stop");
					klicker = new Klicker();
					klicker.start();
					System.out.println("Klicker gestartet.");
				} else {
					klicker.interrupt();
					klicker = null;
				}
			}
		});
		getContentPane().add(startButton, BorderLayout.CENTER);
		pack();
	}

	private class Klicker extends Thread {
		@Override
		public void run() {
			doKlicks();
			startButton.setText("start");
			System.out.println("Klicker finished.");
		}

		void doKlicks() {
			try {
				final java.awt.Robot robot = new java.awt.Robot();
				int n = 0;
				Point position = MouseInfo.getPointerInfo().getLocation();
				while (true) {
					robot.setAutoDelay(DELAY);
					for (Point point : positions) {
						robot.mouseMove((int) point.getX(), (int) point.getY());
						robot.mousePress(InputEvent.BUTTON1_MASK);
						robot.mouseRelease(InputEvent.BUTTON1_MASK);
					}
					n++;
					if (n % DURCHLAEUFE == 0) {
						robot.mouseMove((int) position.getX(), (int) position.getY());
						Thread.sleep(KLICKZEIT);
					}
				}
			} catch (Exception ex) {
				System.out.println("Klicker abgebrochen.");
			}
		}
	}
}
```

schau dir den Code an wie das ganze funktioniert.


----------



## TheSorm (17. Sep 2013)

Sehr viel lieben dank


----------

