2016-04-22 73 views
-1

基本上我試圖保存我在JFrame中編輯的圖像,所以我有一個保存項目的菜單,我有一個動作偵聽器設置爲保存項目,一切工作正常,文件選擇器出現了,我可以選擇我想要保存的位置,只有當我點擊保存時,它不在那裏。這是我的代碼,我錯過了什麼?Image IO寫不寫

if(e.getSource().equals(Save)){ 
     JFileChooser keep = new JFileChooser(); 
     keep.setSelectedFile(new File ("newImage.jpg")); 
     FileNameExtensionFilter filters = new FileNameExtensionFilter("jpeg", "jpg"); 
     keep.setFileFilter(filters); 
     File output = keep.getSelectedFile(); 

     int count = keep.showSaveDialog(keep); 
     BufferedImage out = filteredImage; 

     if (count == JFileChooser.CANCEL_OPTION){ 

     } 
     else{ 
      try{ 
       ImageIO.write(out, "jpg", output); 

       //I put this here to see if I was even reaching the method 
       System.out.println("writing method"); 
      }catch(Exception d){ 
      } 
     } 
    } 
+2

* 「我缺少的東西嗎?」 ..'}趕上(例外d){「*信息!第一次改變到'} catch(Exception d){d.printStackTrace();}'&再次運行代碼。 [MCVE]或[Short,Self Contained,Correct Example](http://www.sscce.org/)。 –

+0

實際上我有一個JOptionPaneDialog(「你的文件無法保存」),但是這也是打印的,當我發佈它雖然!對不起!(我拿出來,因爲它orignally說,你剛剛得到了... ...)編輯:我剛剛添加了d.printstacktrace和它沒有打印出來,所以IMage IO寫入方法是由於某種原因,它只是沒有顯示出我保存的位置 – Elchapo

+0

考慮到'JFileChooser'可能的返回結果的數量,我可能會建議你首先編寫「快樂路徑」,也許使用像'if(count == JFileChooser.ACCEPT_OPTION){'而不是 – MadProgrammer

回答

2

所以,你到了selectedFile參考...

File output = keep.getSelectedFile(); 

的你顯示對話框......

int count = keep.showSaveDialog(keep); 
BufferedImage out = filteredImage; 

然後您嘗試並保存圖像..

ImageIO.write(out, "jpg", output); 

......等等,什麼?!假設getSelectedFile不是null,你怎麼知道你實際保存圖像的位置?

這一進程應稍微扭轉...

showSaveDialog 
if (accepted) { 
    saveFile = getSelectedFile 
    ImageIO.write(img, "jpg", saveFile); 
} 

爲基本psudo代碼示例

+0

我剛剛意識到它現在取代了原始圖像,它並不重要,我試圖保存它或我保存它,因爲它只是重新放置原始圖像,這不是我想要(也不明白爲什麼/如何發生) – Elchapo

+0

在顯示'JFileChooser'之前使用'getSelectedFile',你應該在使用它後,否則你會得到以前選擇的內容,如果有的話 – MadProgrammer

+0

謝謝!那就做到了! – Elchapo