2009-11-06 121 views
2

我们在扩展javax.swing.JApplet的应用程序中构建了小应用程序。最近我们一直面临着在Linux环境下运行X11GraphicsEnvironment时遇到的问题 ,通过在run.conf文件的JAVA_OPTS中设置-Djava.awt.headless = true来浏览各种论坛,我们遇到了这个问题的解决方案。java.lang.NoClassDefFoundError:在Linux上运行基于小应用程序的应用程序时遇到的sun/awt/X11GraphicsEnvironment问题

但这会导致HeadlessException。

最初我们的客户告诉我们用命令ssh -X在终端中启动应用服务器,它以前工作正常,但现在它需要被丢弃。

在此先感谢...

+0

错误发生在哪里?你能打印整个堆栈跟踪吗?这将有助于查明问题。 – 2009-11-06 14:20:37

+0

applet在客户端机器上运行,应用服务器中的config不会影响小程序。你确定这个错误是在一个applet中,还是在服务器端(你是不是试图在服务器上执行applet代码?) – vickirk 2009-11-06 15:56:50

回答

2

您只能运行一个Swing/AWT的应用程序为“无头”如果真的没有GUI。例如,我使用一个创建图形图表的包,但只是将其写入文件而不使用屏幕显示。

如果你运行一个GUI应用程序,你需要提供一个屏幕来显示它。如果你在本地机器上运行它,那通常是“自动”的。如果您在远程计算机上,则需要将DISPLAY环境变量设置为显示机器的主机地址,并且还需要:0或类似的内容以指示屏幕编号。

像OpenSSL或Putty这样的SSH客户端可以在您连接的计算机的外壳中为您自动设置此DISPLAY env变量,然后当您在远程计算机上启动应用程序时,您会在本地计算机的监视器上看到GUI 。如果这个过程出了问题,你会看到你看到的那种错误。

有些事情尝试:

  • 做 “回声$ DISPLAY” 在你的SSH外壳,看看它的设置。

  • 尝试“xeyes”,一个小X程序在屏幕上显示一双眼睛。如果它们出现了,那么事情就会设置好,并且对您的程序有特定的问题。

6

您确定java.awt.headless属性正确进入您的环境吗?由于某种原因,您的小程序是否打算在无头环境中运行?以下是一个演示什么旗做一个快速的示例应用程序:

import java.awt.GraphicsEnvironment; 

public class GETest { 
    public static void main(String[] args) { 
    GraphicsEnvironment ge = 
     GraphicsEnvironment.getLocalGraphicsEnvironment(); 

    System.out.println("class: " + ge.getClass()); 
    System.out.println("isHeadless:" + ge.isHeadless()); 
    } 
} 

当我没有标志在Linux中运行以下命令:

$ java GETest 
class: class sun.awt.X11GraphicsEnvironment 
isHeadless:false 

当我在Linux中旗运行此:

$ java -Djava.awt.headless=true GETest 
class: class sun.java2d.HeadlessGraphicsEnvironment 
isHeadless:true 

此外,如果我取消设置DISPLAY,并且在没有标志的情况下运行,我会得到以下异常:

$ unset DISPLAY 
$ java -Djava.awt.headless GETest 
Exception in thread "main" java.lang.InternalError: Can't connect to X11 window server using ':0.0' as the value of the DISPLAY variable. 
    at sun.awt.X11GraphicsEnvironment.initDisplay(Native Method) 
    at sun.awt.X11GraphicsEnvironment.access$100(X11GraphicsEnvironment.java:52) 
    ... 

如果我然后设置标志,我会得到与上面的isHeadless:true示例相同的输出。

你应该更全面地描述你的环境,这将有助于诊断你的问题。

+0

好的例子!我不知道这个标志 - 感谢信息的发布。 – rcreswick 2009-11-06 18:07:40

相关问题