Tyler Treat
Tyler Treat

Reputation: 14988

Running Java GUI applications through a Linux terminal

I'm on Ubuntu trying to run a Java GUI application through the terminal. I'm getting a HeadlessException when I try to run it. Below is the stack trace:

Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException
    at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:173)
    at java.awt.Window.<init>(Window.java:437)
    at java.awt.Frame.<init>(Frame.java:419)
    at java.awt.Frame.<init>(Frame.java:384)
    at javax.swing.JFrame.<init>(JFrame.java:174)
    at gui.ImageViewer.<init>(ImageViewer.java:34)
    at displayrunner.DisplayRunner$1.run(DisplayRunner.java:15)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:647)
    at java.awt.EventQueue.access$000(EventQueue.java:96)
    at java.awt.EventQueue$1.run(EventQueue.java:608)
    at java.awt.EventQueue$1.run(EventQueue.java:606)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:617)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)

I tried export DISPLAY=:0.0 before running the application, but that had no effect. How do you run a GUI application through Bash?

Upvotes: 15

Views: 40936

Answers (4)

AkD
AkD

Reputation: 437

I had this exception. I tried setting the headless setting to false, and it worked for me:

export JAVA_TOOL_OPTIONS='-Djava.awt.headless=false'

Upvotes: 8

ilalex
ilalex

Reputation: 3078

If you run your application on Ubuntu by the command:

java -jar MyJar.jar

then OpenJDK is used. Try to install the Sun JDK and run your application like:

/usr/java/jre1.6.0_22/bin/java -jar MyJar.jar

Upvotes: 3

Kevin Lacquement
Kevin Lacquement

Reputation: 5117

If you don't have a GUI, you can't run it. Are you running remotely (for example, SSH)?

If so, look into the system that you're using for remote access. For example, with SSH you want to look at the AllowX11Forwarding setting (SSH FAQ entry).

Upvotes: 0

Denis Tulskiy
Denis Tulskiy

Reputation: 19167

I guess you only have the default-jre-headless package installed. Check that you have default-jre.

Upvotes: 30

Related Questions