在我的Grails应用程序中,我使用pdf插件来创建pdfs。 当我尝试创建pdf时,会引发以下异常:
there was a problem with PDF generation java.lang.NoClassDefFoundError:
Could not initialize class sun.awt.X11FontManager
对于这种特殊情况,这种例外的原因是什么? 请注意,该机器具有1.7.0_45版本的Java,我正在使用带有UI的Ubuntu。
编辑: 我尝试过使用Java 1.7.0_17的另一台机器,它可以工作。两个版本的Java之间是否存在差异,或者它取决于Ubuntu版本之间的差异?
编辑2: 我试图在无头模式下运行Java,但我有另一个例外:
java.lang.UnsatisfiedLinkError: /opt/jdk1.7.0_60/jre/lib/i386/libfontmanager.so: libgcc_s.so.1
是运行以前工作的Java版本(如1.7.0_17)的唯一解决方案,还是可以用其他方式解决它?
答案 0 :(得分:2)
在非gui环境(即未安装X11的Linux服务器)中运行时使用AWT类时,通常会发生此错误。您可以使用JVM选项强制Java在“无头模式”下运行:
-Djava.awt.headless=true
这是您可以添加到grails run-app
使用的GRAILS_OPTS环境变量中的内容。或者,如果您在Tomcat或类似产品下运行,则可以将此JVM选项添加到启动脚本中。
答案 1 :(得分:1)
如前所述,NoClassDefFoundError很多时候意味着类路径中的一个类错过了另一个类(它依赖于它)。
换句话说,你有一个依赖于B类的A类,但是在你的类路径中你只有A类。所以你可以毫无问题地编译,但是在运行时JVM找不到类B,这是让A类工作所需的