【问题标题】:How to use an int and string when adding an image to a JLabel将图像添加到 JLabel 时如何使用 int 和 string
【发布时间】:2013-04-14 12:49:10
【问题描述】:

我试图在定义这样的 URI 时添加一个 int 和字符串:

Line 38    Icon iconpic = new ImageIcon(getClass().getResource("img/CM"+a+".png"));   
Line 39    JLabel pic = new JLabel(iconpic);

其中“a”是一个整数。

但是我明白了:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
    at thebutton.CM.<init>(CM.java:38)

我也试过这个:

    String c = Integer.toString(a);
    String d = "img/CM";
    String e = ".png";
    String g = d+a+e; 
    System.out.println(g);
    System.out.println(getClass().getResource(g));
    Icon iconpic = new ImageIcon(getClass().getResource(g));   
    JLabel pic = new JLabel(iconpic);

得到了这个

img/CM0.png
null
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

前 2 行是 .println 的输出 这是 NetBeans 中项目的图片:

有没有办法解决这个问题?

【问题讨论】:

  • 你的项目目录中有文件夹img吗?
  • 从 IDE 或 JAR 运行此代码时是否遇到此异常?
  • 对,src包有code包和img包
  • 我在那里没有看到 CM0.png。
  • FFS - 先用硬编码字符串试试吧!

标签: java string swing int jlabel


【解决方案1】:

这意味着 getClass().getResource("img/CM"+a+".png") 可能返回 null 。 尝试调试getClass().getResource("img/CM"+a+".png"),比如放一个System.out.println(getClass().getResource("img/CM"+a+".png")),看看值。

请检查路径是否正确。

这是Javadocs的链接。

在您的source 文件夹下创建一个img 文件夹并将其命名为"CM"+a+".png" 在其中评估的任何图像。

【讨论】:

  • 好的,但是有没有办法让它返回 "img/CM(The value of a).png?
  • 当您将原始 int 连接到 String 文字时,结果表达式将变为 String
  • 因此出现错误。检查路径是否正确或该位置是否存在提到的资源。
  • 我把 int 变成了一个字符串,它仍然返回 null
  • 只有当我在 URI 中放入 2 个变量时才会出现问题
【解决方案2】:

Projects 选项卡中右键单击您的项目名称,然后选择new -> Folder。作为文件夹名称使用"images"

现在转到Files 选项卡并将您的图像移动到此文件夹


现在用

加载你的图片
new ImageIcon("images/yourImageName.png")

【讨论】:

  • 这不是问题,因为它显示为一个包是一个文件夹,正如我一直告诉你的那样
  • @Matthew 好的,如果你真的想使用包作为图像的源文件夹,那么试试这种方式new ImageIcon("src/thebutton/img/CM"+a+".png"),但要确保a 不是0,因为我没有看到文件夹中的任何CM0.png。我只是警告你,这种方法将来会产生很多问题。为包之外的图像创建单独的文件夹是更好的方法。
  • 问题是Java正在寻找一个不存在的图像,如你所说;谢谢!
【解决方案3】:

不要让 Java 寻找不存在的图像; CM0.png 不存在!

感谢 atamanroman 和 pshemo

【讨论】:

  • 实际上是 atamanroman 发现了它(这就是为什么我对他的一个回答 +1 :D),我只是在我的评论中重复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多