我正在创建一个截取屏幕截图的程序,我想拥有一个带有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();
}
答案 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"
几乎肯定不存在。 (属性名称区分大小写!!)
如果date
为null
或date.getDay()
,则返回null
。我们不知道你是如何初始化date
...甚至是什么类型的。 (虽然Date
是一个很好的猜测......)
"user.home"
属性和"user.dir"
属性都可以工作......虽然它们意味着不同的东西。