2012-03-30 38 views
15

Đoạn mã sau dường như không hoạt động, mặc dù tệp có vẻ được tìm thấy tốt.ImageIO.read trả về NULL, không có lỗi

images = new BufferedImage[32]; 
    FileInputStream fis = null; 
    for (int i = 0; i < 32; i++) { 
     File file = new File("tiles\\"+i+".bmp"); 
     if (!file.exists()){ 
      System.out.println("File "+i+" failed"); 
     } 
     try { 
      fis = new FileInputStream(file); 
     } catch (FileNotFoundException e) { 
      System.err.println(e + "" + i); 
     } 
     try { 
      images[i] = ImageIO.read(fis); 
     } catch (IOException e) { 
      System.err.println(e + "" + i); 
     } 
     if (images[i] == null) { 
      System.out.println("Image "+i+" failed"); 
     } 
    } 

Cảm ơn bạn đã giúp đỡ.

Chỉnh sửa: Kết quả là tôi đang cố gắng để Graphics.drawImage (hình ảnh [0]) ;, và nó cho tôi một ngoại lệ con trỏ null. Mã này ở đây hoàn thành tốt.

Chỉnh sửa: Đã thay đổi di chuyển if (! File.exists()) như được đề xuất và gói tệp vào luồng đầu vào.

+3

[RTFM] (http://docs.oracle.com/javase/7/docs/api/javax/imageio/ImageIO.html#read%28java.io.File%29) – mre

+0

Bạn có thể mô tả kết quả không? Một dự đoán hoang dã: đường dẫn trong không chính xác ... –

+0

Tại sao don'y bạn đặt thử nghiệm của bạn nếu (! File.exists()) System.out.println ("File" + i + "failed"); trước khi đọc? –

Trả lời

7

ImageIO.read (tệp); sẽ trả về null nếu không có đăng ký ImageReader không tìm thấy. Vui lòng kiểm tra xem bạn đã đăng ký bất kỳ ImageReader hay chưa.

Tôi nghĩ rằng đoạn mã này có thể giúp bạn

File file = new File("bear.jpg"); // I have bear.jpg in my working directory 
    FileInputStream fis = new FileInputStream(file); 
    BufferedImage image = ImageIO.read(fis); //reading the image file 

Bạn chỉ cần quấn tập tin vào một FileInputStream và sau đó vượt qua nó để đọc()

+0

Tôi có lẽ vẫn không làm điều này đúng cách, nhưng những gì tôi đã làm đã không thành công. Tôi đã thay đổi mã ở trên để hiển thị những gì đã thay đổi. – Naberius

+0

Bạn có thể nói tên tệp hình ảnh của bạn trong đĩa không? –

+0

@Naberius Bạn có thể nói tên tệp hình ảnh của bạn trong đĩa không? Nó là hoàn toàn làm việc trong trường hợp của tôi. –

27

ImageIO.read(*...) sẽ chỉ tải những loại hình ảnh GIF, PNG, JPEG, BMPWBMP.

Bất kỳ loại hình ảnh nào khác sẽ trả về null mà không có lỗi.

tham khảo: http://docs.oracle.com/javase/tutorial/2d/images/loadimage.html

Tôi nhận ra điều này không phải là một giải pháp cho vấn đề gốc cụ thể nhưng nó là một giải pháp cho câu hỏi hỏi.

0

Hãy thử quấn bạn InputStream vào BufferedInputStream:

fis = new FileInputStream (file); ==> BufferedInputStream mới (tệp FileInputStream mới (tệp));