Enter simulieren

Lara_B

Mitglied
Hi

Ich möchte ein Java Programm schreiben, welches in der Konsole (bash, Linux) ausgeführt wird und nichts anderes macht als einmal die Enter Taste zu drücken.

Wie kann ich in Java das drücken der Enter Taste simulieren?

Grüsse
 

Nardian

Bekanntes Mitglied
Hi,

ich kenne die genauen Befehle zwar nicht auswendig, aber schau dir mal die Robot Klasse von Java an. Diese hat einen keyPress oder sowas, mit dem du Key-Events simulieren kannst (auch außerhalb von Java).

Du wirst aber dich selber drum kümmern müssen, wer den Event bekommt. Das heißt, Robot kann nur Enter simulieren, nicht direkt an ein Programm. Das heißt, du musst dich drum kümmern, dass auch das richtige Programm das Enter bekommt / das richtige Programm gerade den Focus hat.

Lg
 

Lara_B

Mitglied
Hallo

Danke für die Antwort. Nun habe ich ein Problem. Ich habe diese Hilfe Seite angesehen:

Java Tips - How to use Robot class in Java

Und habe den Code übernommen um zu sehen was passiert:

Java:
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;

public class enter_key {
public static void main(String[] args) {

  try {
            
            Robot robot = new Robot();
            // Creates the delay of 5 sec so that you can open notepad before
            // Robot start writting
            robot.delay(5000);
            robot.keyPress(KeyEvent.VK_H);
            robot.keyPress(KeyEvent.VK_I);
            robot.keyPress(KeyEvent.VK_SPACE);
            robot.keyPress(KeyEvent.VK_B);
            robot.keyPress(KeyEvent.VK_U);
            robot.keyPress(KeyEvent.VK_D);
            robot.keyPress(KeyEvent.VK_Y);
            
        } catch (AWTException e) {
            e.printStackTrace();
        }

}
}

javac enter_key.java gibt keine Fehlermeldung aus, doch danach gebe ich java enter_key ein und erhalte:

Code:
java.awt.AWTException: headless environment
        at java.awt.Robot.<init>(Robot.java:97)
        at enter_key.main(enter_key.java:10)

Was bedeutet das und wie behebe ich das?

Danke
Grüsse
 

Nardian

Bekanntes Mitglied
Hi,

paar Sachen:
1. robot.keyPress simuliert wirklich das drücken - und gedrückt halten - einer Taste. Das heißt, wenn du normale tippen möchtest (was bei dem kleinen Test-Proggy der Fall zu sein scheint), solltest du immer auch ein entsprechendes robot.keyRelease aufrufen (das kannst du sofort nach dem Befehl aufrufen können)
2. muss ich zugeben, dass ich interessanter Weise Probleme hatte dein Programm laufen zu lassen. Nicht wegen der von dir beschriebenen Exception, sondern weil Robot schlicht weg bei mir nichts tun wollte. Die createScreenCaputre funktioniert einwandfrei, allerdings die Key und Mouse events werden scheinbar ignoriert... Da bin ich momentan auch etwas ratlos
3. Die Headless-exception bekommst du vermutlich weil Robot auf deine Graphic Device nicht zugreifen kann (warum auch immer). Was für ein Betriebssystem hast du? Bzw könntest du versuchen den Robot mit einem Graphics Device zu initialisieren. Du kannst diese wie folgt besorgen:

Java:
GraphicsEnvironment ge = GraphicsEnvironment.
   getLocalGraphicsEnvironment();
   GraphicsDevice[] gs = ge.getScreenDevices();

Falls du eine Lösung dafür findest, oder weitere Indizien mit denen man was anfangen kann, dann poste bitte nochmal :)

Lg
 

jgh

Top Contributor
mmmh, also das mit dem key-released habe ich zwar auch in der Beschreibung der Methode gelesen, kann das aber nicht bestätigen!
Wenn du -wie empfohlen- einen Editor, oder irgendein Textbearbeitungsprogramm öffnest, schreibt er mir sauber "hi budy" hin, würde das mit dem key-released so sein, sollte ja zumindest der letzte Buchstabe unendlich oft geschrieben werden?! so ist es zumindest wenn ich tatsächlich einen key gedrückt halte.
 

Lara_B

Mitglied
Hi

Das Programm muss auf einem Linux Server laufen, auf welchem keine graphische Oberfläche installiert ist.

Muss robot etwa eine graphische Oberfläche nutzen? ???:L

Gruß
 

Nardian

Bekanntes Mitglied
Hi,

@jgh: find ich ehrlich gesagt zwar etwas komisch, aber kann ich mir auch gut vorstellen. Getestet habe ich es zwar nich, aber ich denke mir dass solange du den key nicht releaset, du auch nich den selben key nochmal senden kannst (zb "aa" schreiben ohne release - mit schon).
Im Zweifelsfall lieber an die javadoc-Empfehlung halten :)

@Lara_B: ja, Robot braucht eine graphische Oberfläche.

Lg
 
S

Spacerat

Gast
Also 'ne andere Möglichkeit als Robot oder JNI wüsste ich auch nicht. Bei letzterem kann man's ja gleich ganz in C realisieren.
Aber zumindest könntest du mal testen, wie Robot reagiert, wenn man Java nebst AWT im Headless-Mode (mit Parameter [c]-Djava.awt.headless=true[/c] startet.
[EDIT]Wenn alle Stricke reissen... Xvfb - Wikipedia, the free encyclopedia[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Java-Freak

Bekanntes Mitglied
Ich habe auch schon mal versucht mit Robot ein Programm zu schreiben, dass im Hintergrund ständig einen Tastendruck simuliert.
Damals hatte ich dass Problem, dass das ganze eigentlich wie gesagt im Hintergrund laufen sollte, aber der Tastendruck wurde nur simuliert, wenn das Swing Fenster der Anwendung gerade ausgewählt im Vordergrund war und nicht, wenn das Fenster minimiert war. Außerdem wurde die Robot Klasse eigentlich nur zum Testen von Grafischen Oberflächen in Java erstellt. Demnach denke ich, dass es mit Java kaum möglich sein wird das ohne grafische Oberfläche im Hintergrund zu machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Ostkreuz Int Scanner auf Enter Eingabe prüfen Java Basics - Anfänger-Themen 4
K Wie kann ich "enter" von der Console in Eclipse löschen? Java Basics - Anfänger-Themen 2
D Programm auf Enter warten lassen Java Basics - Anfänger-Themen 2
B Button soll sowohl auf Klicken als auch auf die Enter-Taste reagieren Java Basics - Anfänger-Themen 9
CptK Interface JTextField: Action mit Enter ausführen Java Basics - Anfänger-Themen 16
x-tshainge Bei if (eingabe = = ... ) enter als eingabe nehemen Java Basics - Anfänger-Themen 4
Z Enter Taste alle 0,5 Sekunden ausführen Java Basics - Anfänger-Themen 1
P Weiter erst bei Drücken de Enter-TAste Java Basics - Anfänger-Themen 1
B Taste "Enter" drücken in einem anderen Programm? Java Basics - Anfänger-Themen 6
A wie fange ich ein "enter" auf? Java Basics - Anfänger-Themen 0
B Methoden Einen Char einlesen ohne Enter abzuwarten Java Basics - Anfänger-Themen 4
B jTextField bei Enter eingabe absenden? Java Basics - Anfänger-Themen 2
A fire button on JTextField Enter Java Basics - Anfänger-Themen 2
M Enter bei OK_CANCEL_OPTION auf dem Cancel Button deaktivieren? Java Basics - Anfänger-Themen 5
I Aktion ausführen bei Enter Java Basics - Anfänger-Themen 6
B 2 Textfelder Enter Taste Java Basics - Anfänger-Themen 3
H JTable: Eingaben mit ENTER übernehmen Java Basics - Anfänger-Themen 2
J JTextfield mit Enter leeren Java Basics - Anfänger-Themen 3
J Schleife durch nichtseingeben/Enter beenden. Java Basics - Anfänger-Themen 5
StrikeTom Editable JComboBox + enter Wie??? Java Basics - Anfänger-Themen 3
J Mit Enter einen Button aktivieren Java Basics - Anfänger-Themen 5
P "Enter"-Taste mit Button verknüpfen Java Basics - Anfänger-Themen 3
K JTextField auslesen, wenn Enter gedrückt.. Java Basics - Anfänger-Themen 13
Z Enter löst einen button aus aber wie? Java Basics - Anfänger-Themen 16
M In Konsole auf Enter reagiern Java Basics - Anfänger-Themen 3
D If Schleife mit "Enter" starten Java Basics - Anfänger-Themen 10
G Enter-Zeichen aus String ersetzen Java Basics - Anfänger-Themen 5
M Einzellne Zeichen lesen und ohne Enter terminieren Java Basics - Anfänger-Themen 7
G Enter Taste abfangen Java Basics - Anfänger-Themen 11
S Programmabsturz bei ENTER Java Basics - Anfänger-Themen 4
F while mit Enter-Taste abbrechen Java Basics - Anfänger-Themen 13
G Leertaste bei Button auf Enter Taste ändern? Java Basics - Anfänger-Themen 6
N Tastatur direkt einlesen (ohne Enter) Java Basics - Anfänger-Themen 3
S JTextField bei enter Java Basics - Anfänger-Themen 3
B textfeld mit enter auslesen klappt nicht Java Basics - Anfänger-Themen 12
M Button in einem JDialog mit Enter ausführen Java Basics - Anfänger-Themen 2
C Einloggen auch per ENTER Taste (KeyListener Problem) Java Basics - Anfänger-Themen 8
D Button und "Enter" Java Basics - Anfänger-Themen 13
B JOptionDialog mit Enter Beenden? Java Basics - Anfänger-Themen 2
T aktion bei enter Java Basics - Anfänger-Themen 2
L ActionListener bei Enter Java Basics - Anfänger-Themen 1
R ENTER in InputStream nicht lesen Java Basics - Anfänger-Themen 4
V Enter abwarten / Mehrere Zeilen einlesen Java Basics - Anfänger-Themen 3
F Bei Login mit Enter bestätigen Java Basics - Anfänger-Themen 7
S Programmierung simulieren - aber wie?! Java Basics - Anfänger-Themen 3
T Tastatur mit robot ß ^ und @ simulieren Java Basics - Anfänger-Themen 4
N Tastatur simulieren Java Basics - Anfänger-Themen 4
T Tastendruck simulieren Java Basics - Anfänger-Themen 13
T Tastendruck simulieren in JPanel Java Basics - Anfänger-Themen 3
R EOF simulieren Java Basics - Anfänger-Themen 2
A dynamisches Array simulieren Java Basics - Anfänger-Themen 8
I USB-Gerät simulieren Java Basics - Anfänger-Themen 4
H Tastendruck simulieren | SendKeys Java Basics - Anfänger-Themen 12
S ANT - for Schleife simulieren? Java Basics - Anfänger-Themen 1
M Prüfung simulieren Java Basics - Anfänger-Themen 4
J Klick der ein Javascript ausfuehrt simulieren? Java Basics - Anfänger-Themen 2
B Mäusepopulation durch Threads simulieren. Java Basics - Anfänger-Themen 2
S Regelkreis simulieren Java Basics - Anfänger-Themen 4
L Mausbewegung sehen und simulieren Java Basics - Anfänger-Themen 2
L JEditorpane Mausklick simulieren Java Basics - Anfänger-Themen 6
R Mausklick simulieren Java Basics - Anfänger-Themen 5
D ActionEvent simulieren ? Java Basics - Anfänger-Themen 7
G Maus+Tastatur aktionen simulieren? Java Basics - Anfänger-Themen 5
B Tasteneingaben simulieren? Java Basics - Anfänger-Themen 3
T Kann man in einer Anwendung Eingaben simulieren? Java Basics - Anfänger-Themen 8
F Wie kann ich das Drücken der Tabulatortaste simulieren Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben