2014-10-20 3 views
-1

, пожалуйста, помогите мне понять, почему :) Моя программа достигла линии «попробуйте», но, похоже, пропустила «catch», хотя ее печать в стеке ... Я использую JOptionPane в моем catch, но также System.out.println() не работает. Код:Код в блоке «catch» не выполняется

import java.awt.AWTException; 
import java.awt.Rectangle; 
import java.awt.Robot; 
import java.awt.Toolkit; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import javax.imageio.ImageIO; 
import javax.swing.JOptionPane; 


public class main { 

    public static void main(String[] args) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy"); 
     Calendar cal = Calendar.getInstance(); 
     String fileName = dateFormat.format(cal.getTime()); 
     Rectangle rectangle = new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()); 
     BufferedImage bufferedImage; 
     try { 
      bufferedImage = new Robot().createScreenCapture(rectangle); 
      try 
      { 
       ImageIO.write(bufferedImage, "jpg", new File("c:/temp/ScrenShots/"+fileName+".jpg")); 
      } catch (IOException e) 
      { 
       JOptionPane frame = null; 
       JOptionPane.showMessageDialog(frame,"Failed to take screen-shot", "ScreenShots", JOptionPane.ERROR_MESSAGE); 
       e.printStackTrace(); 
      } 
     } catch (AWTException e) { 
      JOptionPane frame = null; 
      JOptionPane.showMessageDialog(frame,"AWT Error", "ScreenShots", JOptionPane.ERROR_MESSAGE); 
      e.printStackTrace(); 
     } 

    } 

} 

Исключение:

java.io.FileNotFoundException: c:\temp\ScrenShots\20.10.2014.jpg (The system cannot find the path specified) 
    at java.io.RandomAccessFile.open(Native Method) 
    at java.io.RandomAccessFile.<init>(Unknown Source) 
    at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source) 
    at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(Unknown Source) 
    at javax.imageio.ImageIO.createImageOutputStream(Unknown Source) 
    at javax.imageio.ImageIO.write(Unknown Source) 
    at main.main(main.java:26) 
Exception in thread "main" java.lang.NullPointerException 
    at javax.imageio.ImageIO.write(Unknown Source) 
    at main.main(main.java:26) 
+0

Это внутреннее, так как FileNotFoundException является IOException – triggerNZ

+0

Похоже, у вас нет каталога скриншоты. – eckes

+0

Похоже, у вас нет каталога для скриншотов. И я не думаю, что вы можете показывать диалоги без основного фрейма. – eckes

ответ

2

Существует NullPointerException внутри как раз перед FileNotFoundException

из журнала.

Exception in thread "main" java.lang.NullPointerException //* 
    at javax.imageio.ImageIO.write(Unknown Source) 
    at main.main(main.java:26) 

Вы можете убедиться в этом. Этот код здесь только для того, чтобы указать на проблему. Ловля NullPointerException - это плохая практика кодирования.

try { 
    // current code 
} catch (IOException e) { 
    // current code 
}catch (NullPointerException e){ 
    JOptionPane frame = null; 
    JOptionPane.showMessageDialog(frame, "NPE", "npe", JOptionPane.ERROR_MESSAGE); 
} 
+2

Хорошая догадка! Сначала FileNotFound произошел в «новом файле (« c:/temp/ScrenShots/»+ fileName +». Jpg »)». Затем NullPointerException произошел в «ImageIO.write (bufferedImage,« jpg », Null)), где Null происходит из« нового файла »(« c:/temp/ScrenShots/»+ fileName +». Jpg »)». –

+0

@ Fumu7 хорошее описание, спасибо! – Erez