java.lang.NoClassDefFoundError:sun/awt/X11GraphicsEnvironment在Linux上运行基于applet的app时面临的问题

aru*_*lam 2 java

我们在扩展javax.swing.JApplet的应用程序中构建了applet.最近我们在linux环境中运行时遇到了X11GraphicsEnvironment的问题,通过在run.conf文件的JAVA_OPTS中设置-Djava.awt.headless = true来浏览各个论坛我们遇到了这个问题的解决方案.

但这会导致HeadlessException.

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

提前致谢...

joe*_*oev 6

您确定java.awt.headless属性正确进入您的环境吗?您的applet是否打算出于某种原因在无头环境中运行?这是一个快速示例应用程序,演示了该标志的作用:

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());
  }
}
Run Code Online (Sandbox Code Playgroud)

当我在没有标志的Linux中运行它时:

$ java GETest
class: class sun.awt.X11GraphicsEnvironment
isHeadless:false
Run Code Online (Sandbox Code Playgroud)

当我在Linux中使用标志运行它时:

$ java -Djava.awt.headless=true GETest
class: class sun.java2d.HeadlessGraphicsEnvironment
isHeadless:true
Run Code Online (Sandbox Code Playgroud)

此外,如果我取消设置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)
    ...
Run Code Online (Sandbox Code Playgroud)

如果我然后设置了标志,我得到的输出与我在isHeadless中的输出相同:上面的例子.

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