通过Linux终端运行Java GUI应用程序

通过Linux终端运行Java GUI应用程序,java,linux,user-interface,bash,ubuntu,Java,Linux,User Interface,Bash,Ubuntu,我在Ubuntu上尝试通过终端运行JavaGUI应用程序。当我试着运行它时,我会感到头晕。下面是堆栈跟踪: Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:173) at java.awt.Window.<init>(Window.java:43

我在Ubuntu上尝试通过终端运行JavaGUI应用程序。当我试着运行它时,我会感到头晕。下面是堆栈跟踪:

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)
线程“AWT-EventQueue-0”java.AWT.HeadlessException中的异常 位于java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:173) 在java.awt.Window.(Window.java:437) 在java.awt.Frame.(Frame.java:419) 在java.awt.Frame.(Frame.java:384) 在javax.swing.JFrame。(JFrame.java:174) 在gui.ImageViewer.(ImageViewer.java:34) 在displayrunner.displayrunner$1.run(displayrunner.java:15) 在java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:226)中 位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:647) 在java.awt.EventQueue.access$000(EventQueue.java:96) 在java.awt.EventQueue$1.run(EventQueue.java:608) 在java.awt.EventQueue$1.run处(EventQueue.java:606) 位于java.security.AccessController.doPrivileged(本机方法) 位于java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:105) 位于java.awt.EventQueue.dispatchEvent(EventQueue.java:617) 位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275) 在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:200) 位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:190) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185) 位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177) 位于java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
在运行应用程序之前,我尝试了
export DISPLAY=:0.0
,但没有效果。如何通过Bash运行GUI应用程序?

如果没有GUI,就无法运行它。您是否远程运行(例如SSH)


如果是这样,请查看用于远程访问的系统。例如,使用SSH时,您希望查看
允许x11向前
设置。

我想您只安装了
默认的jre headless
包。如果您通过以下命令在Ubuntu上运行应用程序,请检查您是否拥有
默认jre

java -jar MyJar.jar
然后使用OpenJDK。尝试安装Sun JDK并运行应用程序,如下所示:

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

我有一个例外。我尝试将headless设置设置为false,它对我有效:

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

我并不遥远。我在我的笔记本电脑上运行Ubuntu。如果你没有运行GUI,你就不能运行GUI应用程序。啊,你是通过X的终端运行的?在这种情况下,您需要查看终端的说明,以确保正确设置显示变量。不幸的是,存在的可能性和不同的终端一样多。尝试使用基本终端(如XTerm)进行故障排除。对我有用,谢谢。软件包中有Ubuntu,但没有安装。“sudo apt get install openjdk-6-jre”对我也很有用。在我的例子中,我只安装了默认的jdk headless。因此,我安装了默认的JDK只是一句话:在Fedora/RedHat发行版中,这个包被称为“java-N.N.N-openjdk”(其中NNN是版本号),或者,您可以使用命令
update java alternations
在您的机器上选择默认的java。这对我不起作用,但确实使它提供了一个更有用的消息(图书馆遗失)