2011-08-10 37 views
6

Tôi có một tệp hình ảnh trong dự án của mình. Các hệ thống phân cấp như sau:Đọc một hình ảnh trong Netbeans

Project hierarchy

Tôi đang cố gắng để đọc Manling.png vào Manling.java sử dụng mã này:

public BufferedImage sprite; 

public Manling() 
{ 
    try 
    { 
    File file = new File("resources/Manling.png"); 
    sprite = ImageIO.read(file); 
    } catch (IOException e) {} 

    System.out.println(sprite.toString()); //This line is to test if it works 
} 

tôi luôn có được một NullPointerException trên báo cáo kết quả println, vì vậy Tôi cho rằng con đường là sai. Tôi đã thử di chuyển hình ảnh đến các địa điểm khác nhau trong dự án và tôi đã thử thay đổi đường dẫn tệp (ví dụ: 'mine/resources/Manling.png' và '/resources/Manling.png'). Bất kỳ ý tưởng?

Nếu bạn muốn có một ví dụ compilable đầy đủ, hãy thử điều này:

package minesscce; 

import javax.swing.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.io.*; 
import javax.imageio.*; 
import java.net.URL; 

public class Mine extends JFrame 
{ 
private BufferedImage sprite; 

public static void main(String args[]) 
{ 
    Mine mine = new Mine(); 
} 

public Mine() 
{ 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    setVisible(true); 
    setSize(800, 600); 
    setExtendedState(Frame.MAXIMIZED_BOTH); 
    setBackground(Color.WHITE); 

    try 
    { 
     File file = new File("resources/Manling.png"); 
     sprite = ImageIO.read(file); 
    } catch (IOException e) {} 

    System.out.println(sprite.toString()); 
} 

public void paint(Graphics g) 
{ 
    g.translate(getInsets().left, getInsets().top); 
    Graphics2D g2d = (Graphics2D)g; 

    g2d.drawImage(sprite, 0, 0, this); 
    Toolkit.getDefaultToolkit().sync(); 
    g2d.dispose(); 
} 

}

Chỉ cần thiết lập các dự án như thế này, sử dụng bất kỳ hình ảnh bạn muốn:

SSCCE

Trả lời

9

Hãy thử

ImageIO.read(Mine.class.getResource("../minesscce.resources/Manling.png")); 

Dưới đây là một ví dụ:

  • Hierarchy

enter image description here

  • quả

enter image description here

Và đây là đang ...

public final class ImageResourceDemo { 
    private static BufferedImage bi; 

    public static void main(String[] args){ 
     try { 
      loadImage(); 

      SwingUtilities.invokeLater(new Runnable(){ 
       @Override 
       public void run() { 
        createAndShowGUI();    
       } 
      }); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private static void loadImage() throws IOException{ 
     bi = ImageIO.read(
       ImageResourceDemo.class.getResource("../resource/avatar6.jpeg")); 
    } 

    private static void createAndShowGUI(){ 
     final JFrame frame = new JFrame(); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.getContentPane().setBackground(Color.WHITE); 
     frame.add(new JLabel(new ImageIcon(bi))); 
     frame.pack(); 
     frame.setLocationRelativeTo(null); 
     frame.setVisible(true); 
    } 
} 
+0

Tôi nhận nó hoạt động khi hình ảnh ở trong 'mine.resources' và đường dẫn là '../resources/Manling.png'. Tôi không hiểu tại sao, nhưng tôi sẽ không phàn nàn. Cảm ơn! – Tharwen

0

Nếu tôi không sai, thư mục gốc của ứng dụng của bạn là thư mục dự án hoặc thư mục nguồn. (Không chắc chính xác cái nào là) ​​

Nếu đó là thư mục dự án thì resources/Manling.pngMineSSCCE/resources/Manling.png. Không có gì ở đó cả!

Nếu đó là thư mục nguồn, resources/Manling.pngMineSSCCE/Source/resources/Manling.png. Không có gì là có!

Vị trí thực tế là MineSSCCE/Source/minesscce/resources/Manling.png Đó là lý do tại sao nó không hoạt động.

Các vấn đề liên quan