【问题标题】:Java Swing JButton Image Error DebuggingJava Swing JButton图像错误调试
【发布时间】:2016-04-13 05:06:02
【问题描述】:

我正在尝试将图像添加到 JButton。我已将名为 Bloop.png 的图像放入我的类文件夹下的文件目录中,并使用了以下代码

public class Control extends JInternalFrame {

    static JPanel    panelButt;
    static JButton   buttBloop;
    static Image     imgBloop;

    public Control() {

          panelButt = new JPanel(new FlowLayout(FlowLayout.LEFT, 0, 0));
          buttBloop = new JButton("Bloop");

          setTitle("Control");
          setSize(400, 300);
          setDefaultCloseOperation(JInternalFrame.DISPOSE_ON_CLOSE);


          // CHECK IF FILE EXISTS : this outputs FOUND when run
          File location = new File("classes/Bloop.png");
          if(location.exists()) {
             System.out.println("FOUND");
          } else {
             System.out.println("NOT FOUND");
          }

          try {
             imgBloop = ImageIO.read(getClass().getResource("classes/Bloop.png"));
             buttBloop.setIcon(new ImageIcon(imgBloop));
          } catch(IOException log) {
             System.out.println(log);
          }

          add(panelButt, BorderLayout.NORTH);
          panelButt.add(buttBloop);

    }

}

当我运行它时,我得到一个错误

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: input == null!

这是为什么?我是不是做错了什么?

【问题讨论】:

  • 跟Swing无关,跟JButton无关,都是找路径错误的图片资源。如果您搜索此问题,您会发现这是一个常见问题,而且很容易解决。

标签: java image swing icons jbutton


【解决方案1】:

您的图像 Bloop.png 确实位于类路径的根目录,因此您应该将其称为“/Bloop.png”:

ImageIO.read(getClass().getResource("/Bloop.png"));

【讨论】:

  • 这行得通,但我不是 100% 确定它为什么行得通,位置检查使用了“classes/Bloop.png”,而图像使用了“/Bloop.png”。它们怎么可能是不同的路径,但仍然有效?
  • 因为您的位置检查是基于一个 File 对象,该对象使用相对于您的应用程序运行的目录(通常是项目的根目录)的路径,但类路径是相对于文件夹(s ) 包含类(在您的情况下为 classes/)。
  • 非常感谢您的详细说明,我不喜欢使用修复程序,除非我先理解它们并且这个解释是完美的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-03
  • 2014-07-12
相关资源
最近更新 更多