linux环境weblogic & tomcat 下报表里报出的图表类不能显示和乱码的错误-java.lang.NoClassDefFoundError: sun/awt/X11 问题解决

本文介绍了解决JAVA项目中报表无法显示及中文乱码的问题。针对报表不显示,通过设置-Djava.awt.headless=true参数成功解决;对于中文乱码,则通过安装中文字体并确保字体路径正确的方法来解决。

     在做某些项目时,有报表功能的JAVA项目总会有不能显示,显示了中文乱码的错误。


      1、不能显示的错误。

             看日志,总会报 java.lang.NoClassDefFoundError: sun/awt/X11GraphicsEnvironment 的错误。

             从表面上看是环境变量设置错误或者是包缺失所致,但是在linux 设置了环境变量

             export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

             这个设置了之后还是不起作用。

        

              之后在加入-Djava.awt.headless=true

           weblogic下是在setDomain.sh下的JAVA_OPTIONS的变量下设置;

              tomcat 在tomcat配置文件catalina.sh文件中添加 CATALINA_OPTS="-Djava.awt.headless=true",tomcat修改之后还要修改catlina.sh

           

           据说这个是一个JVM的一个BUG所致,好吧,不管咋样,现在可以显示了。


     2、显示乱码的问题。

 

             重启了weblogic之后,发现了一堆乱码,之后分析,应该是汉字显示问题。

             在/usr/share/fonts下果然没有发现chinese.

             之后安装了中文字体,安装方法见:http://blog.youkuaiyun.com/nirvana52/article/details/52846707

             大概是这么个思路,首先他不是用的fashion chart 或者是silver light之类在客户端实现而是像gd2一样在服务端生成图片来实现的,so ,问题来了:

             如果中文显示的话他的字体在哪里找?

             肯定是依靠操作系统。

             而主机之前接触过,应该是最简安装,连x11之类的桌面都是我后续补上去的。


             所以,我建议之后像应用类的服务器还是安装上桌面,还有字体最好将需要的语言也钩上,咱毕竟是在中国,不是在英格丽湿国家。


  


        

`java.lang.NoClassDefFoundError: org/glassfish/jersey/servlet/webcomponent$5` 错误通常表明 WebLogic 服务器在运行时无法找到所需的 Jersey 库类。该问题的根本原因可能涉及类加载器的优先级配置当、依赖库版本冲突或缺失。 ### 原因分析 1. **类加载器优先级配置当** WebLogic 默认使用其自身的类加载器来加载应用所需的类。如果应用中自带了 Jersey 相关的 JAR 包,而 WebLogic 的系统类加载器优先加载了自己的版本,可能会导致类版本一致或找到特定类的问题。 2. **依赖库版本冲突** WebLogic 12c 自带了一些 Jersey 模块(如 Jersey 1.x 或 2.x),如果应用程序部署时引入了同版本的 Jersey(例如通过 Maven 或手动添加 JAR 文件),就可能出现版本冲突,导致某些类无法正确加载。 3. **缺少必要的 JAR 文件** 如果项目中遗漏了 `jersey-servlet` 或其他相关模块的 JAR 文件,则在运行时会抛出 `NoClassDefFoundError`。 --- ### 解决方案 #### 1. 配置类加载器优先级 可以通过修改 `weblogic.xml` 文件,设置类加载器优先加载应用中的类而WebLogic 提供的类: ```xml <container-descriptor> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> ``` 此配置将确保应用优先使用 `WEB-INF/lib` 下的类库,从而避免与 WebLogic 自带的 Jersey 版本发生冲突 [^1]。 #### 2. 显式指定 Jersey 版本并排除冲突依赖 检查项目的构建文件(如 `pom.xml`)并确保只包含一个版本的 Jersey 依赖。例如,若希望使用 Jersey 2.x: ```xml <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.35</version> </dependency> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.35</version> </dependency> ``` 同时,应排除 WebLogic 可能加载的旧版本 Jersey 模块: ```xml <container-descriptor> <prefer-application-packages> <package-name>javax.ws.rs.*</package-name> <package-name>org.glassfish.jersey.*</package-name> </prefer-application-packages> </container-descriptor> ``` 这样可以确保 WebLogic 使用应用提供的 Jersey 实现 [^1]。 #### 3. 手动验证部署依赖 JAR 确保所有必需的 Jersey JAR 文件(如 `jersey-servlet.jar`)都已放置在应用的 `WEB-INF/lib` 目录中,并且没有被意外删除或遗漏。 #### 4. 升级或补丁 WebLogic 如果使用的是较旧的 WebLogic 12c 版本,建议升级到最新补丁版本,以支持更现代的 Jersey 版本并修复潜在的类加载问题--- ### 示例代码:Jersey 资源类 为了确保 Jersey 正确运行,以下是一个简单的资源类示例: ```java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class HelloResource { @GET @Produces(MediaType.TEXT_PLAIN) public String sayHello() { return "Hello, Jersey!"; } } ``` 此外,确保 `web.xml` 中配置了 Jersey 的 Servlet: ```xml <servlet> <servlet-name>JerseyServlet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.example.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>JerseyServlet</servlet-name> <url-pattern>/api/*</url-pattern> </servlet-mapping> ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值