如何在java中保存我的屏幕截图

时间:2013-07-13 00:57:33

标签: java file screenshot actionlistener javax.imageio

我正在创建一个截取屏幕截图的程序,我想拥有一个带有actionlistener的JButton,按下它时会将图像保存到某个文件夹中,如果该文件夹尚未存在,则会将其保存。

这是我认为应该做的事情:

@Override
public void actionPerformed(ActionEvent arg0) {
    File dir = new File("C://SnippingTool+/" +  date.getDay());
    dir.mkdirs();
try {
    ImageIO.write(shot, "JPG", dir);
} catch (IOException e) {
    e.printStackTrace();
}

    }

});

我认为这与我的File dir = new File有关,而且我没有保存到正确的地方。

这是我的Robot截图:

try {
shot = new Robot().createScreenCapture(new Rectangle(Toolkit.getDefaultToolkit().getScreenSize()));
    } catch (HeadlessException e1) {
        e1.printStackTrace();
    } catch (AWTException e1) {
        e1.printStackTrace();
    }

2 个答案:

答案 0 :(得分:1)

问题,我认为这是两条线......

File dir = new File("C://SnippingTool+/" +  date.getDay());
dir.mkdirs();

现在这意味着您尝试写入的输出是一个目录,当ImageIO期待文件时,这将失败...

而是尝试类似......

File output = new File("C://SnippingTool+/" +  date.getDay() + ".jpg");
File dir = output.getParentFile();
if (dir.exists() || dir.mkdirs()) {
    try {
        ImageIO.write(shot, "JPG", output);
    } catch (IOException e) {
        e.printStackTrace();
    }    
} else {
    System.out.println("Bad Path - " + dir);
}

答案 1 :(得分:0)

回应你的评论:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at main$2$2.actionPerformed(main.java:148) 
     

那是在:

File output = new File(System.getProperty("user.home") + 
                       date.getDay() + ".jpg"); 
     

(我将“C:\”更改为System.getProperty(“User.home”))。

该行中只有两种可能的NPE原因(为了便于阅读而包装):

  • 如果System.getProperty找不到指定的属性,则会返回null。现在"user.home"属性应该存在......但"User.home"几乎肯定不存在。 (属性名称区分大小写!!)

  • 如果datenulldate.getDay(),则返回null。我们不知道你是如何初始化date ...甚至是什么类型的。 (虽然Date是一个很好的猜测......)


"user.home"属性和"user.dir"属性都可以工作......虽然它们意味着不同的东西。