Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java.lang.NoClassDefFoundError:sun/awt/X11GraphicsEnvironment在linux上运行基于小程序的应用程序时遇到的问题_Java - Fatal编程技术网

java.lang.NoClassDefFoundError:sun/awt/X11GraphicsEnvironment在linux上运行基于小程序的应用程序时遇到的问题

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

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

但这会导致无头例外

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


提前感谢…

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

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

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

有些事情可以尝试:

  • 在SSH shell中执行“echo$DISPLAY”,查看是否已设置

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


您确定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
$ 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示例中相同的输出


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

错误发生在哪里?可以打印整个堆栈跟踪吗?这将有助于查明问题。小程序在客户端计算机上运行,应用程序服务器中的配置不会影响小程序。您确定错误是在小程序中还是在服务器端(您没有尝试在服务器中执行小程序代码,是吗?)很好的示例!我不知道那面旗子——谢谢你提供的信息。