【问题标题】:can't get ImageIcon to find my to find my image from C drive无法让 ImageIcon 找到我从 C 驱动器中找到我的图像
【发布时间】:2018-05-10 02:21:46
【问题描述】:

简单的井字游戏分为两类。我知道使用 URL,但我想让它工作。这是到目前为止的程序。我大部分是从 youtube 教程中得到的,但现在出现错误消息

线程“主”java.lang.NullPointerException 中的异常

在 java.desktop/javax.swing.ImageIcon.(未知来源)

在 XOButton.(XOButton.java:17)

在井字游戏.(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);
    }
}

}

【问题讨论】:

  • 它是相似的,但我认为这与变量范围有关,我不确定,我看了看它并没有解决,如果我变量不会转移到 actionPerformed 类在 XOButton 方法中初始化它们,但如果我在方法之前初始化并将它们转换为 obj 并且我将简单地放入 X 中,它也不会工作;
  • 因此,总而言之,对于其他查看此内容的人,我修复了 break 语句,并在项目中添加了一个资源文件夹作为主文件夹并切换了此语句 X = new ImageIcon(this.getClass( ).getResource("C:\\Users\\mattt\\Pictures\\X.PNG"));到语句 X = new ImageIcon("Resource/X.PNG");和 O 一样,当然 0 而不是 O 也是一个错误,因为文件名

标签: java swing user-interface imageicon


【解决方案1】:

您的代码中存在一些问题。

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 语句中,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;
    }
}

【讨论】:

  • 我修复了中断,愚蠢的错误,但你是说将图像放入 src 以供 eclipse 或包中的任何位置,我听说 src 中有一个资源文件夹但我找不到它我的。
  • @MattTaliancich 您可以在那里创建一个资源文件夹并将图像放入其中。创建文件夹:stackoverflow.com/questions/27934796/… 如果我的回答有帮助,请接受。所以它会在未来对某人有所帮助。
  • 应该几乎在那里所做的更改是添加资源文件夹并将“Resouce/X.PNG”仍然给我错误,几乎感觉就像它只是我的eclipse无法找到在这一点上。我在这里和其他地方读到的所有内容都表明它应该可以工作。
  • 如果您创建了如前所述的资源文件夹,那么您还必须进行以下更改;。 X = new ImageIcon("resources\\X.PNG");我已经测试了你的代码,它对我有用。
  • 没有更多错误感谢上帝!最后一件事,我认为我没有在 actionPerformed 部分中直接调用 X 和 O,因为它们不会更改为图像。
猜你喜欢
  • 2014-12-19
  • 1970-01-01
  • 2015-08-27
  • 1970-01-01
  • 2022-11-28
  • 2023-03-18
  • 2014-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多