2015-06-29 137 views
0

我使用下面的代码将BufferedIMage写入磁盘,但是如果我不关闭程序,我无法用窗口打开它。我正在考虑编写代表将会做的伎俩,但我错了我猜,我错过了什么?谢谢您的帮助!writer.dispose()不按预期工作

private void saveToFile(BufferedImage img, File file) throws IOException 
{ 
    ImageWriter writer = null; 
    java.util.Iterator iter = ImageIO.getImageWritersByFormatName("jpg"); 

    if(iter.hasNext()) 
    { 
     writer = (ImageWriter)iter.next(); 
    } 

    ImageOutputStream ios = ImageIO.createImageOutputStream(file); 
    writer.setOutput(ios); 
    ImageWriteParam param = new JPEGImageWriteParam(java.util.Locale.getDefault()); 
    param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ; 
    param.setCompressionQuality(0.98f); 

    writer.write(null, new IIOImage(img, null, null), param); 
    writer.dispose();// here the dispose not working 
} 
+0

您应该关闭ImageOutputStream。 –

回答

1

我想你也应该关闭ios。请尝试以下操作:

private void saveToFile(BufferedImage img, File file) throws IOException 
{ 
    ImageWriter writer = null; 
    java.util.Iterator iter = ImageIO.getImageWritersByFormatName("jpg"); 

    if(iter.hasNext()) 
    { 
     writer = (ImageWriter)iter.next(); 
    } 

try { 
     ImageOutputStream ios = ImageIO.createImageOutputStream(file); 
     writer.setOutput(ios); 
     ImageWriteParam param = new JPEGImageWriteParam(java.util.Locale.getDefault()); 
     param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT) ; 
     param.setCompressionQuality(0.98f); 

     writer.write(null, new IIOImage(img, null, null), param); 
    } 

    finally { 
     if (ios != null) { 
      try { 
      ios.flush(); 
      } 
    catch (  IOException e) { 
      } 
      try { 
      ios.close(); 
      } 
    catch (  IOException e) { 
      } 
     } 
     if (writer != null) { 
      writer.dispose(); 
     } 
     } 
} 
+0

它工作得很好谢谢:) – Neithalf