JInput

Java library for access to input devices.

View project on GitHub

Maven Central Javadocs JInput CI

Welcome to the Java Input API Project!

The JInput Project hosts an implementation of an API for game controller discovery and polled input. It is part of a suite of open-source technologies initiated by the Game Technology Group at Sun Microsystems with intention of making the development of high performance games in Java a reality.

The API itself is pure Java and presents a platform-neutral completely portable model of controller discovery and polling. It can handle arbitrary controllers and returns both human and machine understandable descriptions of the inputs available.

The implementation hosted here also includes plug-ins to allow the API to adapt to various specific platforms. These plug-ins often contain a native code portion to interface to the host system.

Getting Started

Maven

Include the dependency in your project:

    <dependency>
        <groupId>net.java.jinput</groupId>
        <artifactId>jinput</artifactId>
        <version>2.0.10</version>
    </dependency>
    <dependency>
        <groupId>net.java.jinput</groupId>
        <artifactId>jinput</artifactId>
        <version>2.0.10</version>
        <classifier>natives-all</classifier>
    </dependency>

You’ll also need to add the build plugin in your build/plugins section of your pom

    <plugin>
        <groupId>com.googlecode.mavennatives</groupId>
        <artifactId>maven-nativedependencies-plugin</artifactId>
    </plugin>

A full pom might look like this one

Without maven

The jar file with the java code in should be in maven central, you’ll need the jinput.jar and jinput-natives-all.jar that contains the native binaries.

Running

Add the jinput jar to your classpath, if you are using maven and have the native dependencies plugin working, it will have unpacked the native binaries to target/natives, you must specify the java.library.path property to point to this directy.

Example

java -cp ~/.m2/repository/net/java/jinput/jinput/2.0.10/jinput-2.0.10.jar:target/examples-pom-2.0.10.jar -Djava.library.path=target/natives net.java.games.input.example.ReadFirstMouse

More generally

java -cp <path to jinput.jar>:<your own jars> -Djava.library.path=<path to natives> <main class>

Usage

/* Create an event object for the underlying plugin to populate */
Event event = new Event();

/* Get the available controllers */
Controller[] controllers = ControllerEnvironment.getDefaultEnvironment().getControllers();
for (int i = 0; i < controllers.length; i++) {
    /* Remember to poll each one */
    controllers[i].poll();

    /* Get the controllers event queue */
    EventQueue queue = controllers[i].getEventQueue();

    /* For each object in the queue */
    while (queue.getNextEvent(event)) {
        /* Get event component */
        Component comp = event.getComponent();

        /* Process event (your awesome code) */
        ...
    }
}

More examples here.