Robot Class in Java AWT (original) (raw)

Last Updated : 23 Jul, 2025

The Robot class in the Java AWT package is used to generate native system input events for the purposes of test automation, self-running demos, and other applications where control of the mouse and keyboard is needed. The primary purpose of Robot is to facilitate automated testing of Java platform implementations. In simple terms, the class provides control over the mouse and keyboard devices.

Here is an example of how the Robot class takes control of the keyboard and types out into a blank Notepad document. Notepad is called using Process and Runtime, as discussed in this article.

Java `

// Java program to demonstrate working of Robot // class. This program is for Windows. It opens // notepad and types a message. import java.awt.AWTException; import java.awt.Robot; import java.awt.event.KeyEvent; import java.io.*;

public class robo { public static void main(String[] args) throws IOException, AWTException, InterruptedException { String command = "notepad.exe"; Runtime run = Runtime.getRuntime(); run.exec(command); try { Thread.sleep(2000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); }

    // Create an instance of Robot class
    Robot robot = new Robot();

    // Press keys using robot. A gap of
    // of 500 milli seconds is added after
    // every key press
    robot.keyPress(KeyEvent.VK_H);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_E);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_L);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_L);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_O);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_SPACE);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_F);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_R);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_O);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_M);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_SPACE);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_G);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_E);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_E);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_K);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_S);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_F);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_O);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_R);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_G);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_E);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_E);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_K);
    Thread.sleep(500);
    robot.keyPress(KeyEvent.VK_S);
}

}

`

Output:

The code opens a blank Notepad file and types "hello from geeksforgeeks" onto it with a delay of 500 ms before typing out each character.

You might have already found out that the code has become really lengthy for writing a small string. In that case we can store the message in a string and iterate it and display. To press the capital letters we have to press down the shift key, press the key and then release the shift key. The same can be done for symbols too.

Java `

import java.awt.*; import java.awt.event.KeyEvent;

class Robo { // Our custom sleep method public static void sleep(long ms) { try {Thread.sleep(ms);} catch (Exception ignored) {} }

public static void main(String[] args) throws Exception {
    // Open Notepad
    Runtime.getRuntime().exec("notepad.exe");
    // Wait for 2 seconds
    sleep(2000);
    // Create instance of Robot class
    Robot robot = new Robot();
    // The String to type
    String str = "Hello from GeeksforGeeks";
    // Press keys using robot
    // A gap of 200ms is added between each key press
    for (int i = 0; i < str.length(); i++) {
        // Check if the current character is a capital letter
        if (Character.isUpperCase(str.charAt(i))) {
            // Press shift key
            robot.keyPress(KeyEvent.VK_SHIFT);
            // Press the current character
            robot.keyPress(Character.toUpperCase(str.charAt(i)));
            // Release shift key
            robot.keyRelease(KeyEvent.VK_SHIFT);
        }
        // else display the character as it is
        else robot.keyPress(Character.toUpperCase(str.charAt(i)));
        // wait for 200ms
        sleep(200);
    }
}

}

`

This opens the Notepad and types the same thing with a 200ms gap between characters. This approach is better when working with larger items.

Methods of the Robot class

Return Type Method Description
BufferedImage createScreenCapture(Rectangle screenRect) Creates an image containing pixels read from the screen.
void delay(int ms) Sleeps for the specified time.
int getAutoDelay() Returns the number of milliseconds this Robot sleeps after generating an event.
Color getPixelColor(int x, int y) Returns the color of a pixel at the given screen coordinates.
boolean isAutoWaitForIdle() Returns whether this Robot automatically invokes waitForIdle after generating an event.
void keyPress(int keycode) Presses a given key.
void keyRelease(int keycode) Releases a given key.
void mouseMove(int x, int y) Moves mouse pointer to given screen coordinates.
void mousePress(int buttons) Presses one or more mouse buttons.
void mouseRelease(int buttons) Releases one or more mouse buttons.
void mouseWheel(int wheelAmt) Rotates the scroll wheel on wheel-equipped mice.
void setAutoDelay(int ms) Sets the number of milliseconds this Robot sleeps after generating an event.
void setAutoWaitForIdle(boolean isOn) Sets whether this Robot automatically invokes waitForIdle after generating an event.
void waitForIdle() Waits until all events currently on the event queue have been processed.