Чтение изображения в Netbeans - PullRequest
7 голосов
/ 10 августа 2011

У меня есть файл изображения в моем проекте. Иерархия выглядит следующим образом:

Project hierarchy

Я пытаюсь прочитать Manling.png в Manling.java, используя этот код:

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
}

Я всегда получаю NullPointerException в операторе println, поэтому я предполагаю, что путь неверен. Я попытался переместить изображение в разные места в проекте и попытался изменить путь к файлу (например, «mine / resources / Manling.png» и «/resources/Manling.png»). Есть идеи?

Если вам нужен полностью компилируемый пример, попробуйте следующий:

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();
}

}

Просто настройте проект так, используя любое изображение, которое вы хотите:

SSCCE

Ответы [ 2 ]

10 голосов
/ 10 августа 2011

Попробуйте

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

Вот пример:

  • Иерархия

enter image description here

  • Результат

enter image description here

А вот код ...

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 голосов
/ 12 августа 2011

Если я не ошибаюсь, корневым каталогом вашего приложения является каталог проекта или исходный каталог.(Не уверен, какой именно)

Если это каталог проекта, то resources/Manling.png равно MineSSCCE/resources/Manling.png.Ничего там нет!

Если это исходный каталог, resources/Manling.png равно MineSSCCE/Source/resources/Manling.png.Там тоже ничего нет!

Фактическое местоположение - MineSSCCE/Source/minesscce/resources/Manling.png Вот почему оно не работает.

...