【问题标题】:JFileChooser image to buffered imageJFileChooser 图像到缓冲图像
【发布时间】:2016-08-05 11:57:41
【问题描述】:

我在运行我的程序时遇到了一些问题。基本上我的程序的第 1 步是使用 JFileChooser 打开图像并将其制成缓冲图像,够简单吧?这就是我所拥有的:

JButton open = new JButton();
            JFileChooser fc = new JFileChooser();
            File selectedFile = fc.getSelectedFile();
            fc.setDialogTitle("Please choose an image...");
            FileNameExtensionFilter filter = new FileNameExtensionFilter("JPEG", "jpeg", "jpg", "png", "bmp", "gif");
            BufferedImage origImage = null;

            String path = "";
            File f = fc.getSelectedFile();
            boolean exists = false;
            fc.addChoosableFileFilter(filter);


            try {

                f = fc.getSelectedFile();
                exists = f.exists();
                path = f.getAbsolutePath();

                origImage = ImageIO.read(new File(path));
            }
            catch(Exception e) {
                System.out.println(e);
                System.exit(0);
            }

我得到一个空指针异常(由我的 catch 语句捕获)我认为它与 getbsolutepath 有关,但我不确定。有任何想法吗?谢谢!

【问题讨论】:

  • origImage = ImageIO.read(f); 有什么问题?
  • 你似乎从来没有打开文件选择器?

标签: java swing jfilechooser javax.imageio


【解决方案1】:

您似乎从未真正打开文件选择器,因此没有选择任何文件会导致NullPointerException

JFileChooser fc = new JFileChooser();
fc.setDialogTitle("Please choose an image...");
FileNameExtensionFilter filter = new FileNameExtensionFilter("JPEG", "jpeg", "jpg", "png", "bmp", "gif");
fc.addChoosableFileFilter(filter);

BufferedImage origImage = null;
// You should use the parent component instead of null
// but it was impossible to tell from the code snippet what that was.
if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
    File selectedFile = fc.getSelectedFile();
    try {
        origImage = ImageIO.read(selectedFile);
    } catch (IOException ex) {
        ex.printStackTrace();
    }
}

查看How to Use File Choosers了解更多详情

【讨论】:

  • 如果用户在 JFileChooser 窗格中点击取消,我将如何让它终止程序?
  • @Elchapo 根据您的代码,您可能有很多方法可以做到这一点,您可以使用else 语句来简单地调用System.exit(0),但我总是觉得这有点苛刻。检查origImage 是否为null 可能会更好,如果是,您只需让执行落到方法的末尾,如果不是null,则以任何方式处理它你想要的方式
  • 非常感谢! origImage == null 是有道理的!谢谢!!
  • new FileNameExtensionFilter("JPEG", "jpeg", "jpg", "png", "bmp", "gif"); 最好更像:new FileNameExtensionFilter( "Image files", ImageIO.getReaderFileSuffixes()); 有关详细信息,请参阅this answer
【解决方案2】:

试试这个

path = f.getAbsolutePath().replace("\", "\\");

【讨论】:

  • 这不是必需的,ImageIO.read 可以使用 File 引用,因此 OP 不应该乱用 String 文件名,因为 OP 从未实际说明它们,所以应该没有理由改变,因为 API 已经考虑了它们
猜你喜欢
  • 2013-04-14
  • 1970-01-01
  • 1970-01-01
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2020-07-08
相关资源
最近更新 更多