今天迁移老项目到linux服务器,jdk8 ,tomcat8.5遇到这个问题。

java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.JPEGCodec

查询资料得知,原来openjdk从jdk7开始去掉了这个类。

ICEpdfPDF-332
JPEGCodec has been removed from JDK 1.7

引用:http://jira.icesoft.org/browse/PDF-332

处理:

更换为oracle jdk8,解决问题。

这两天都快被这个错误整疯了!!!
最近在写java项目的时候需要用到

  1. import com.sun.image.codec.jpeg.JPEGCodec;
  2. import com.sun.image.codec.jpeg.JPEGImageEncoder;

这两个类来把图片写入磁盘。注意:这两个类可是处在系统自带的jre里的rt.jar包里

  1. FileOutputStream out = new FileOutputStream(targetFile);
  2. JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
  3. encoder.encode(mBufferedImage);

本来在本地Eclipse测试的好好的,但是部署到Linux服务器的时候就出错了

  1. java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.JPEGCodec
  2. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
  3. at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
  4. at com.vxpai.wechat.util.ImgUtil.imageScale(ImgUtil.java:72)
  5. at com.vxpai.wechat.webcontroller.UploadController.ss(UploadController.java:68)
  6. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  7. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  8. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  9. at java.lang.reflect.Method.invoke(Method.java:606)
  10. at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
  11. at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
  12. at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
  13. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
  14. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
  15. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
  16. at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
  17. at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
  18. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
  19. at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
  20. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
  21. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  22. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  23. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  24. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
  25. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  26. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
  27. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
  28. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
  29. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
  30. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
  31. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
  32. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
  33. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
  34. at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
  35. at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
  36. at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
  37. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  38. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  39. at java.lang.Thread.run(Thread.java:745)

刚开始的时候以为是没有引入rt.jar,将其用maven(我的项目是基于maven建立的)引入,部署上去之后居然还是报错:

  1. java.lang.UnsatisfiedLinkError: no jpeg in java.library.path
  2. at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
  3. at java.lang.Runtime.loadLibrary0(Runtime.java:849)
  4. at java.lang.System.loadLibrary(System.java:1088)
  5. at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:67)
  6. at sun.security.action.LoadLibraryAction.run(LoadLibraryAction.java:47)
  7. at java.security.AccessController.doPrivileged(Native Method)
  8. at sun.awt.image.codec.JPEGImageEncoderImpl.<clinit>(JPEGImageEncoderImpl.java:73)
  9. at com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(JPEGCodec.java:68)
  10. at com.vxpai.wechat.util.ImgUtil.imageScale(ImgUtil.java:72)
  11. at com.vxpai.wechat.webcontroller.UploadController.ss(UploadController.java:68)
  12. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  13. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  14. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  15. at java.lang.reflect.Method.invoke(Method.java:606)
  16. at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
  17. at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
  18. at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
  19. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
  20. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
  21. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
  22. at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
  23. at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
  24. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
  25. at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
  26. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
  27. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  28. at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
  29. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
  30. at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
  31. at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
  32. at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
  33. at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
  34. at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
  35. at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
  36. at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
  37. at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:931)
  38. at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
  39. at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
  40. at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
  41. at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
  42. at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
  43. at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  44. at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

最后,果断弃百度google了一下,终于找到了产生java.lang.ClassNotFoundException的原因:The basic explanation is that com.sun.image.codec.jpeg.JPEGCodec and related libraries have long been marked as depreciated, and you should use the ImageIO library instead.  参考地址:http://www.derrickwilliams.com/

原来,在jdk最新的版本中,这jpeg包下的类已经不推荐,所以,果断用ImageIO替换这两个类

  1. FileOutputStream out = new FileOutputStream(targetFile);
  2. ImageIO.write(mBufferedImage, type, out);

修改完成,部署,终于OK啦!

java.lang.ClassNotFoundException: com.sun.image.codec.jpeg.JPEGCodec的更多相关文章

  1. java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec

    java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec 这个类在 rt.jar 里面 本地开发,jre里有这个包,所以不会 ...

  2. java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec 解决方案

    使用java生成图片的时候,报了java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/JPEGCodec 错误. 根据这个类的api说明,在 ...

  3. OpenJDK中java.lang.NoClassDefFoundError: com/sun/image/codec/jpeg/ImageFormatException解决办法

    http://www.cnblogs.com/xusweeter/p/9667801.html

  4. Caused by: java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC

    Caused by: java.lang.ClassNotFoundException: com/sun/tools/internal/xjc/api/XJC 缺少com/sun/tools/inte ...

  5. java.lang.ClassNotFoundException: com.sun.jna.Native

    在使用sprng boot加elasticsearch的时候遇到 java.lang.ClassNotFoundException: com.sun.jna.Native,百度之后要我导入 <d ...

  6. java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl解决办法

    问题现象: 这种很可能出现在独立一个简单示例项目中可以用,但是在把webService模块加入系统后,报出这类错误. Exception in thread "main" java ...

  7. jfinal运行时报错分析java.lang.ClassNotFoundException: com.sun.faces.config.ConfigureListener

    这里解释一下,我用maven jetty运行没啥问题的项目,当我切换tomcat时候出现如下错误. 问题1. - jar not loaded. See Servlet Spec 3.0, secti ...

  8. import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包

    import com.sun.image.codec.jpeg.JPEGCodec;   在Eclipse中处理图片,需要引入两个包: import com.sun.image.codec.jpeg. ...

  9. import com.sun.image.codec.jpeg.JPEGCodec不通过 找不到包(转载)

    http://www.xuebuyuan.com/2008608.html 在Eclipse中处理图片,需要引入两个包:import com.sun.image.codec.jpeg.JPEGCode ...

随机推荐

  1. 基于.net 的加载自定义配置-误操作

    有时候 需要 将程序加载自定义的配置文件,除了自己写解析xml文件.内置的ConfigutionManager对象 是个不错的选项. 按照 app.config 的方式,做一个副本.然后从你的配置文件 ...

  2. NFS详解

    00.什么是 NFS (Network FileSystem) NFS 就是 Network FileSystem 的缩写,最早之前是由 sun这家公司所发展出来的. 他最大的功能就是可以透过网络,让 ...

  3. CSS3制作Freebie标签

    <!DOCTYPE HTML> <html lang="en-US"> <head> <meta charset="UTF-8& ...

  4. AWK中的OFS的问题

    echo a b c d |awk '{OFS = ":";print $0}' 我的理解是应该把输出显示为如下的方式 a:b:c:d dan但执行的结果不是这样的 a b c d ...

  5. 用setitimer实现多个定时器

    从这篇文章中可以看出,setitimer只能实现一个定时器,如果多次调用setitimer,旧值都会被覆盖掉. 如何用setitimer实现多个定时器呢?下面是我的一个实现,具体的方法是: 用链表从小 ...

  6. Swift内存管理、weak和unowned以及两者区别(如何使用Swift 中的weak与unowned?)

    Swift 是自动管理内存的,这也就是说,我们不再需要操心内存的申请和分配. 当我们通过初始化创建一个对象时,Swift 会替我们管理和分配内存.而释放的原则遵循了自动引用计数 (ARC) 的规则:当 ...

  7. Python 多进程教程

    Python2.6版本中新添了multiprocessing模块.它最初由Jesse Noller和Richard Oudkerk定义在PEP 371中.就像你能通过threading模块衍生线程一样 ...

  8. &&和;和||符号的意思

    http://www.cnblogs.com/xuxm2007/archive/2011/01/16/1936836.html在命令行可以一次执行多个命令,有以下几种:   1.每个命令之间用;隔开 ...

  9. eclipse 中使用中文JAVA api文档

    http://hi.baidu.com/danghj/item/7625a1be20946e43ba0e1202在eclipse中使用中文JAVA api文档Sun 官方的中文版 Java API 文 ...

  10. 仿京东左侧菜单 hover效果-简易demo

    简单描述: 用到的知识点 css 中的绝对定位 以及 Js 中的事件冒泡(或事件委托) .cont{display:inline-block;width:200px;height:200px;bord ...