我们在扩展 javax.swing.JApplet 的应用程序中构建了 applet。最近我们一直面临的问题 X11GraphicsEnvironment 在 linux 环境中运行时,浏览各种论坛,我们通过在 run.conf 文件的 JAVA_OPTS 中设置 -Djava.awt.headless=true 来解决这个问题。
但这会导致 HeadlessException。
最初我们的客户告诉我们在终端中使用命令 ssh -X 启动应用服务器,它曾经工作正常,但现在需要丢弃它。
提前致谢...
最佳答案
您确定 java.awt.headless 属性正确进入您的环境吗?您的小程序是否出于某种原因打算在 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 示例中相同的输出。
您应该更全面地描述您的环境,这将有助于诊断您的问题。
关于java.lang.NoClassDefFoundError : sun/awt/X11GraphicsEnvironment issuses faced while running our applet based app on linux 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1687898/