java.lang.NoClassDefFoundError:sun/awt/X11GraphicsEnvironment在linux上运行基于小程序的应用程序时遇到的问题
我们在扩展javax.swing.JApplet的应用程序中构建了applet。最近我们一直面临着 X11GraphicsEnvironment在linux环境中运行时,通过在run.conf文件的JAVA_OPTS中设置-Djava.awt.headless=true,浏览各种论坛,我们发现了这个问题的解决方案 但这会导致无头例外 最初,我们的客户机告诉我们在终端中使用ssh-X命令启动应用服务器,它过去工作正常,但现在需要放弃它java.lang.NoClassDefFoundError:sun/awt/X11GraphicsEnvironment在linux上运行基于小程序的应用程序时遇到的问题,java,Java,我们在扩展javax.swing.JApplet的应用程序中构建了applet。最近我们一直面临着 X11GraphicsEnvironment在linux环境中运行时,通过在run.conf文件的JAVA_OPTS中设置-Djava.awt.headless=true,浏览各种论坛,我们发现了这个问题的解决方案 但这会导致无头例外 最初,我们的客户机告诉我们在终端中使用ssh-X命令启动应用服务器,它过去工作正常,但现在需要放弃它 提前感谢…如果没有GUI,您只能以“无头”的方式运行Swing
提前感谢…如果没有GUI,您只能以“无头”的方式运行Swing/AWT应用程序。例如,我使用一个创建图形图表的包,但只将其写入文件,而不使用屏幕显示 如果运行GUI应用程序,则需要提供一个屏幕来显示它。如果你在本地机器上运行它,那通常是“自动”的。如果您在远程计算机上,则需要将DISPLAY环境变量设置为显示计算机的主机地址,并加上:0或类似值以指示屏幕编号 SSH客户端(如OpenSSL或Putty)可以在连接到的机器外壳中自动为您设置此DISPLAY env变量,然后在远程机器上启动应用程序时,您可以在本地机器的监视器上看到GUI。如果这个过程出了问题,你就会看到你所看到的那种错误 有些事情可以尝试:
- 在SSH shell中执行“echo$DISPLAY”,查看是否已设置
- 试试“xeyes”,一个在屏幕上显示一双眼睛的小X程序。如果它们出现,那么一切都设置好了,并且您的程序有一个特定的问题
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
$ java -Djava.awt.headless=true GETest
class: class sun.java2d.HeadlessGraphicsEnvironment
isHeadless:true
当我在Linux中使用以下标志运行此操作时:
$ java GETest
class: class sun.awt.X11GraphicsEnvironment
isHeadless:false
$ 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示例中相同的输出
您应该更全面地描述您的环境,这将有助于诊断您的问题。错误发生在哪里?可以打印整个堆栈跟踪吗?这将有助于查明问题。小程序在客户端计算机上运行,应用程序服务器中的配置不会影响小程序。您确定错误是在小程序中还是在服务器端(您没有尝试在服务器中执行小程序代码,是吗?)很好的示例!我不知道那面旗子——谢谢你提供的信息。