Ошибки в пути к картинке, как исправить

287
23 августа 2021, 11:30

У меня есть отдельный файл с картинками под названием src, в котором файл img и там картинки. Файл Src я назначил права Resources Root. Но ошибка не пропала.

Код:

package company;
import javax.swing.*;
import java.awt.*;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import sweeper.Box;
import sweeper.Coord;
import sweeper.Game;
import sweeper.Ranges;
public class JavaSweeper extends JFrame
{
    private Game game;
    private JPanel panel;
    private JLabel label;
    private final int COLS = 9; // столбцы
    private final int ROWS = 9; // строки
    private final int BOMBS = 10; // количество бомб
    private final int IMAGE_SIZE = 30; // размер картинки одинаковый по x и по y
    public static void main(String[] args)
    {
        new JavaSweeper();
    }
    private JavaSweeper ()
    {
        game = new Game(COLS, ROWS, BOMBS);
        game.start();
        setImages();
        initLabel();
        initPanel();
        initFrame();
    }
    private void initLabel ()
    {
        label = new JLabel("Найди все бомбы!!!");
        add (label, BorderLayout.SOUTH);
    }
    private void initPanel (){
        panel = new JPanel() // при инициализации выводим картинки
        {
            @Override
            protected void paintComponent(Graphics g)
            {
                super.paintComponent(g);
                for (Coord coord : Ranges.getAllCoords())
                    //g.drawImage((Image) game.getBox(coord).image, coord.x * IMAGE_SIZE, coord.y * IMAGE_SIZE, this); //приведение типа к Image
                    g.drawImage((Image) game.getBox(coord).image, coord.x * IMAGE_SIZE, coord.y * IMAGE_SIZE, IMAGE_SIZE, IMAGE_SIZE, this); //приведение типа к Image
            }
        };
        panel.addMouseListener(new MouseAdapter() {
            @Override
            public void mousePressed(MouseEvent e) {
                int x = e.getX() / IMAGE_SIZE;
                int y = e.getY() / IMAGE_SIZE;
                Coord coord = new Coord(x, y);
                if (e.getButton() == MouseEvent.BUTTON1) // левая кнопка мыши
                    game.pressLeftButton (coord);
                if (e.getButton() == MouseEvent.BUTTON3) // правая кнока мыши
                    game.pressRightButton (coord);
                if (e.getButton() == MouseEvent.BUTTON2) // средняя кнопка мыши
                    game.start (); // перезапускаем игру
                label.setText(getessage ());
                panel.repaint(); // после каждого действия мыши перерисовываем панель игры
            }
        });
        panel.setPreferredSize(new Dimension(Ranges.getSize().x * IMAGE_SIZE, Ranges.getSize().y * IMAGE_SIZE));
        add (panel);
    }
    private String getessage()
    {
        switch (game.getState())
        {
            case PLAYED: return "Еще есть бомбы";
            case BOMBED:return "Бабах - ты взорвался";
            case WINNER: return "Примите поздравления";
            default: return "Welcome";
        }
    }
    private void initFrame ()
    {
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setTitle("Java Sweeper 2000 Volosatov");
        setResizable(false);
        setVisible(true);
        pack(); //метод из класса JFrame устанавливает размер окна достаточный для отображения
        setIconImage(getImage("icon"));
        setLocationRelativeTo(null);
    }
    private void setImages ()
    {
        for (Box box : Box.values())
            box.image = getImage(box.name().toLowerCase());
    }
    private Image getImage (String name){
        String filename = "img/" + name + ".png";
        ImageIcon icon = new ImageIcon(getClass().getResource(filename)); //использование ресурсов (подключить папку с ресурсами)
        return icon.getImage();
    }
}
Answer 1

Причина ошибки в том, что getClass().getResource(filename) возвращал null.

Другими словами ресурс по указанному адресу не был найден.

Попробуйте строить путь к ресурсу, начиная с слеша:

String filename = "/img/" + name + ".png";
READ ALSO
Класс обёртка Integer

Класс обёртка Integer

Почему во всех примерах, я вижу вот такое: Integer a = new Integer(242); - хотя этот вариант деприкейтед, в идее прям зачеркивает этот кодПочему никто не показывает...

169
Как сделать зависимость между кнопкой и option?

Как сделать зависимость между кнопкой и option?

Как в зависимости от выбранной опции тега select, содержащей data-id, привязать его к кнопке, те при выборе 1, кнопка получала data-id = 1 и тд

88
SyntaxError: Unexpected token =

SyntaxError: Unexpected token =

подскажите пожалуйста при запуске данного кода мне выдаётся ошибка

297
как получить сумму значений переменных в цикле for

как получить сумму значений переменных в цикле for

как на JS получить сумму переменных обрабатываемых в цикле for ? и вынести эту сумму за цикл ?

81