# Wie kann ich mit Java eine Tastatureingabe simmulieren ?



## Vilsa (11. Sep 2007)

Hi Leute, 

also bis jetzt habe ich immer nur die Tastatur abgefragt ob eine Eingabe erfolgt ist. 
Wie kann ich aber simulieren, dass mein Programm z.B. all 10 min die Taste eins drückt. 
Ich meine nicht damit das er nur eine schleife mit einem Zähler macht und dann die eins ausgibt. Ne so das der Computer denkt die Taste eins ist gedrückt worden. 

Es wäre echt sehr lieb von euch mir da zu helfen. 


Danke


----------



## P3AC3MAK3R (11. Sep 2007)

Die Klasse Robot könnte Dir weiterhelfen:

http://java.sun.com/j2se/1.4.2/docs/api/java/awt/Robot.html


----------



## Vilsa (11. Sep 2007)

Haa Danke 

also so 
public void keyPress(int VK_F9)

wäre es dann für F9 ? 

Fett. Ist auch eine Geile Klasse die kann ja so tolle sachen


----------



## Vilsa (11. Sep 2007)

Bitte jetzt nicht lachen, aber könntest Du mir noch einmal helfen ?

Ich habe einfach mal schnell ein kleines Prog gemacht. Aber leider geht es nicht. Was mach ich denn falsch bei der Benutzung. 

Danke 


```
import java.awt.Robot.*;
public class test
{

  public static void main(String[] args)
   {
  int a=0,b=10000;
  double c;
  

  for (c=a;c<b;c++)
  {
    System.out.println (c);

  }
    a=a+1;
    public void keyPress(int VK_NUMPAD1);
    System.out.println ("jo es rennt");

  }
}
```


----------



## Marco13 (11. Sep 2007)

Äh - nicht ganz  :lol: 
Schau' dir mal die grundlegendsten Grundlagenbücher zu java an, die du finden kannst.

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

class RobotTest3
{
    public static void main(String args[])
    {
        new RobotTest3();
    }

    private Robot robot;

    public RobotTest3()
    {
        try
        {
            robot = new Robot();
            Runtime.getRuntime().exec("notepad.exe");
            Thread.sleep(1000);
            type("Mit GROSS und kleinschreibung");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public void type(String string)
    {
        for (int i=0; i<string.length(); i++)
        {
            char c = string.charAt(i);
            int code = Character.toUpperCase(c);
            if (Character.isUpperCase(c))
            {
                robot.keyPress(KeyEvent.VK_SHIFT);
                robot.keyPress(code);
                robot.keyRelease(code);
                robot.keyRelease(KeyEvent.VK_SHIFT);
            }
            else
            {
                robot.keyPress(code);
                robot.keyRelease(code);
            }
        }
    }

}
```


----------



## Vilsa (11. Sep 2007)

Ja ich bin total durch den Wind jetzt ich habe es auch so versucht. 


```
import java.awt.Robot.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class test
{

  public static void main(String[] args)
   {
  int a=0,b=10000;
  double c;

  

  for (c=a;c<b;c++)
  {
    System.out.println (c);

  }
    a=a+1;
    Robot r = new Robot();
    r.keyPress(KeyEvent.VK_A);
    System.out.println ("jo es rennt");

  }
}
```

Könnte mir bitte einer helfen. 

Danke


----------



## Marco13 (11. Sep 2007)

public static void main(String[] args) * throws Excpetion*

Ist zwar ein Hack, aber das dürfte (dir) egal sein.


----------



## Vilsa (11. Sep 2007)

ich möchte ja nur, dass er die Taste eins drükt. Ich möchte ja gerne verstehen wie das läuft mehr nicht.

dann macht er einen Fehler 

public static void main(String[] args)  throws Excpetion
1 error


----------



## tuxedo (11. Sep 2007)

Nicht 

public static void main(String[] args) throws Excpetion 

sondern

public static void main(String[] args) throws Exception


----------



## Vilsa (11. Sep 2007)

Ja da war es  

Man shiet ja den Wald vor lauter Bäumen nicht. 

Dankeeeeeee


----------



## Marcel_Handball (11. Sep 2007)

Ansonsten auch nochmal ein weiteres Beispiel:


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

public class Test{  
	
	
	public static void main( String[] args ){
		JFrame f = new JFrame("Fenster");
		JTextArea t = new JTextArea();
		
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(t);
		f.setSize(Toolkit.getDefaultToolkit().getScreenSize());
		f.setVisible(true);
		
		/*t.addKeyListener(new KeyAdapter(){
			public void keyPressed(KeyEvent e){
				System.out.println(e.getKeyCode());
			}
		});*/
		
		try{Robot rob = new Robot();
			Thread.sleep(2000);
			rob.keyPress(97);
		}
		catch(AWTException e){}
		catch(InterruptedException k){}
		
	}
}
```


----------



## Vilsa (11. Sep 2007)

Wenn man das normal machen möchte was müste man denn statt dessen 
public static void main(String[] args) throws Exception
schreiben ? 

Danke


----------



## mikachu (11. Sep 2007)

was meinst du mit "normal" ?

#edit 1:
schreib doch alles in eine statische methode von der klasse Test


----------



## tuxedo (11. Sep 2007)

try{...

// Code der die Exception werfen kann/wird

} catch (TralalaException e) {
// exceptionhandling....
e.printStackTrace();
}


----------



## Vilsa (11. Sep 2007)

Danke das war was ich wissen wollte  :lol:


----------



## tuxedo (11. Sep 2007)

Das Buch "Java ist auch eine Insel" kennst du? Da kann man online prima nachschlagen. Erspart hier und da einen Nachfrage im Forum.

- Alex


----------



## Vilsa (11. Sep 2007)

Da habe ich doch galtt noch eine Frage. 

Ich habe es bis jetzt sehr uimständlich, dass er wieder zu einem Punkt im Programm springt. 
Ich mache es mit einer do wihle schliefe und einem Merker. 
Gibt es nicht so ein Befehl jump to 32 oder so. Damit er das immer wieder ausfüht ?


sowas wie das 




```
2

import java.awt.Robot.*;
import java.awt.*;
import java.io.*;
import java.awt.event.*;
public class test
{

  public static void main(String[] args)
   {
  int a=0,b=10000;
  double c;

 

  for (c=a;c<b;c++)
  {
    System.out.println (c);

  }
    a=a+1;
    Robot r = new Robot();
    r.keyPress(KeyEvent.VK_A);
    System.out.println ("jo es rennt");
   [color=darkred] Jump to12[/color]
  }
}
```

Danke


----------



## Vilsa (11. Sep 2007)

Ja das kenne ich und ich habe es auch runtergeladen @ home. Aber gerade weil das hier ein Forum ist für anfänger sollte ich doch für solche Fragen hier richtig sein.


----------



## tuxedo (11. Sep 2007)

Na und warum benutzt du das Buch dann nicht? Lesen bildet. Und wir sind ja nicht dazu da dir das lesen abzunehmen. Im Buch ist sowas Grundlegendes recht weit vorne erklärt wird. 
Kannst ja mal nach "while" oder "for" suchen.

- Alex


----------



## Vilsa (11. Sep 2007)

Super Tip. Wenn Du meine Frage gelesen hättest, dann wüsstest Du, dass ich es so mache. Aber meine Frage ist ob es nicht noch einfacher geht ?


----------



## tuxedo (11. Sep 2007)

Nein, ein JUMP gibt es in Java nicht. Und das ist auch gut so. Und was sollte ein JUMP an der Stelle einfacher machen, was mit While oder For nicht schon einfach genug wäre?


----------



## Wildcard (11. Sep 2007)

GOTOs solltest du in jeder Hochsprache meiden


			
				Wikipedia hat gesagt.:
			
		

> 1968 zeigte Edsger W. Dijkstra in seinem Aufsatz *Go To Statement Considered Harmful* (der Titel geht allerdings auf N. Wirth zurück), dass in einer strukturierten Programmiersprache der Goto-Befehl völlig entbehrlich ist. Diese Meinung wurde in der Programmierausbildung bald zum Dogma erhoben; in einigen Sprachen wie Java wurde bewusst überhaupt kein Goto-Befehl eingeführt (abgesehen von einem „gelabelten“ break – Schlüsselwort).


----------



## Vilsa (11. Sep 2007)

Es ist doch nur eine Frage, ob es ncoh was einfacheres als eine do while schleife gibt? 

Sowas wie früher mit z.B. goto 10 das ist nur zum verdeutlichen.


----------



## tuxedo (11. Sep 2007)

Und ich verdeutliche jetzt zum zweiten mal dass es nix einfacheres gibt weil "while" und "for" auch schon easy genug sind und sogar noch vorteilhafter sind.

- Alex


----------



## Saxony (12. Sep 2007)

Hallo,

nochmal was zu Label und Goto. Wer sich schon mal intensiver den Quellcode des Linuxkernels angeschaut hat, dem wird auffallen, dass dort häufiger Sprungbefehle benutzt werden.

Meist in der Form:


```
InitSomeThingA()
if errorCode != 0 Goto A;
InitSomeThingB()
if errorCode != 0 Goto B;
InitSomeThingC()
if errorCode != 0 Goto C;
InitSomeThingD()
if errorCode != 0 Goto D;
InitSomeThingE()
if errorCode != 0 Goto E;

Goto normal;

E:
destroyInitDObject();

D:
destroyInitCObject();

C:
destroyInitBObject();

B:
destroyInitAObject();

A:
return -1

normal:

//mache hier normal weiter
```

Das mal so als Hinweis. Diese Vorgehensweise erspart doppeltes Aufräumen von Objecten bei Fehlschlägen oder andere schwer zu lesende Verrenkungen.

bye Saxony


----------



## Jango (12. Sep 2007)

Hehe - dann ist wohl Linux ganz 'böse' geschrieben?  ???:L


----------



## Saxony (12. Sep 2007)

Jango hat gesagt.:
			
		

> Hehe - dann ist wohl Linux ganz 'böse' geschrieben?  ???:L



Hehe,

nein hierbei geht es im wesentlichen darum, dass man den Kernel nicht alleine Programmiert und sich somit andere schnellere durch solche Initprozesse hangeln können.

Am besten du schreibst oben genanntes mal um, ohne Verwendung Goto. Dann sieht man welches sich besser liest und welches nicht. 

bye Saxony


----------

