转载: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(); } } }
即可解决报错问题。