не удается получить ImageIcon, чтобы найти мое изображение с диска C - PullRequest
0 голосов
/ 10 мая 2018

Простые крестики-нолики разделены на два класса. Я знаю об использовании URL, но я хочу, чтобы это работало. Вот программа на данный момент. я получил его из учебника YouTube по большей части, но теперь сообщение об ошибке

Исключение в потоке "main" java.lang.NullPointerException

в java.desktop / javax.swing.ImageIcon. (Неизвестный источник)

в XOButton. (XOButton.java:17)

в TicTacToe. (TicTacToe.java:24)

в TicTacToe.main (TicTacToe.java:13)

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.GridLayout;



public class TicTacToe extends JFrame{

JPanel p = new JPanel();
XOButton buttons[] = new XOButton [9];

public static void main(String[] args) {
    new TicTacToe();
}

public TicTacToe() {
    super ("TicTacToe");
    setSize(400,400);
    setResizable(false);
    setDefaultCloseOperation(EXIT_ON_CLOSE);

    p.setLayout(new GridLayout(3,3));
    for (int i=0; i<9; i++) {
        buttons[i] = new XOButton();
        p.add(buttons[i]);
    }

    add(p);

    setVisible(true);
}

}

следующая:

import javax.swing.JButton;
import javax.swing.ImageIcon;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class XOButton extends JButton implements ActionListener{

ImageIcon X,O;
byte value = 0;
/*
 0:nothing
 1:X
 2:O
 */

public XOButton() {
    X = new ImageIcon(this.getClass().getResource("C:\\Users\\mattt\\Pictures\\X.PNG"));
    O = new ImageIcon(this.getClass().getResource("C:\\Users\\mattt\\Pictures\\0.PNG"));
    this.addActionListener(this);
}


public void actionPerformed(ActionEvent e) {
    value++;
    value %= 3;

    switch(value) {
    case 0:
        setIcon(null);
        break;
    case 1:
        setIcon(X);
    case 2:
        setIcon(O);
    }
}

}

1 Ответ

0 голосов
/ 10 мая 2018

В вашем коде есть некоторые проблемы.

1) Чтобы исключить исключение nullpointerException, вы должны добавить изображения в один пакет. и внесите изменения, как показано ниже.

public XOButton() {
    X = new ImageIcon(this.getClass().getResource("X.PNG"));
    O = new ImageIcon(this.getClass().getResource("0.PNG"));
    this.addActionListener(this);
}

2) В вашем операторе switch case 1 и 2 не имеет оператора break.

public void actionPerformed(ActionEvent e) {
    value++;
    value %= 3;

    switch(value) {
    case 0:
        setIcon(null);
        break;
    case 1:
        setIcon(X);
        break;
    case 2:
        setIcon(O);
        break;
    default:
        break;
    }
}
...