转载:http://superich2008.iteye.com/blog/2047830
失败提示信息为:程序包com.sun.image.codec.jpeg不存在
这个类文件的位置在jre/lib/rt.jar
而我们设置的java_home下面的lib/dt.jar中没有这个文件,导致编译失败。通过配置maven-compiler-plugin插件可以解决此问题。
<plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.6</source> <target>1.6</target> <encoding>UTF-8</encoding> <optimize>true</optimize> <debug>true</debug> <showDeprecation>true</showDeprecation> <showWarnings>false</showWarnings> <compilerArguments> <verbose /> <bootclasspath>${java.home}/lib/rt.jar;${java.home}/lib/jce.jar</bootclasspath> </compilerArguments> </configuration> </plugin>
在windows下面用;分隔,linux下面用:分隔。
方案-:
查询网上的解决方案,但是仍然报编译失败。后经过查找,最终定位问题。
原因是由于编译的依赖JDK版本过高引起的。从JDK1.7开始,中com.sun.image.codec.jpeg这个类被删除,所以编译总是报错,解决方案,编译的JDK版本设置为JDK1.6或者以下版本,编译通过。
方案二:
解决代码API引用问题。
原始代码:
ByteArrayOutputStream out = null; byte[] b = null; try { BufferedImage bi = ImageIO.read(is); Image Itemp = bi.getScaledInstance(wdith, height, BufferedImage.SCALE_SMOOTH); BufferedImage thumbnail = new BufferedImage(wdith, height, BufferedImage.TYPE_INT_RGB); thumbnail.getGraphics().drawImage(Itemp, 0, 0, null); out = new ByteArrayOutputStream(); // 绘图 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbnail); param.setQuality(1.0f, false); encoder.encode(thumbnail); out.flush(); b = out.toByteArray(); out.close(); bi.flush(); bi = null; } catch (IOException e) { logger.error(Util.stackTrace2String(e)); }finally{ if(out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } }
改变实现方式:
ByteArrayOutputStream out = null; byte[] b = null; try { BufferedImage bi = ImageIO.read(is); // Image Itemp = bi.getScaledInstance(wdith, height, BufferedImage.SCALE_SMOOTH); // BufferedImage thumbnail = new BufferedImage(wdith, height, BufferedImage.TYPE_INT_RGB); // thumbnail.getGraphics().drawImage(Itemp, 0, 0, null); out = new ByteArrayOutputStream(); // 绘图 // JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); // JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(thumbnail); // param.setQuality(1.0f, false); // encoder.encode(thumbnail); ImageIO.write(bi, "jpg", out); out.flush(); b = out.toByteArray(); out.close(); bi.flush(); bi = null; } catch (IOException e) { logger.error(Util.stackTrace2String(e)); }finally{ if(out != null){ try { out.close(); } catch (IOException e) { e.printStackTrace(); } } }
即可解决报错问题。