我想在我的GUI中添加一张图片,但它似乎无法显示图片。 (也许它无法找到它?)我没有错误,所有发生的事情都是弹出一个空白的JFrame。 我正在使用Eclipse,图片与我正在使用的相同包中。
代码:
package josh_package;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.swing.*;
import java.io.File;
import java.io.IOException;
import java.util.logging.Logger;
import java.awt.Image;
import javax.imageio.ImageIO;
public abstract class TrevCard extends JPanel implements ActionListener{
public static void main(String[] args)
{
JFrame f = new JFrame("Here's Your Card!");
JLabel label = new JLabel();
label.setIcon(new ImageIcon("Ace.png"));
f.add(label);
f.setLocationRelativeTo(null);
f.setSize(600, 300);
f.setVisible(true);
System.out.println("This is a program for cards!");
PlayingCard MyCard;
MyCard = new PlayingCard(5,2);
System.out.println(MyCard.GetValue());
System.out.println(MyCard.GetSuit());
}
}
答案 0 :(得分:2)
您正在使用的ImageIcon constructor将文件名作为参数。因此,此构造函数尝试在当前目录中的磁盘上查找此文件(因为您传递的路径是相对路径)。当前目录不是Java源文件所在的目录。它是用于执行应用程序的java命令的目录。
您不想使用文件IO加载图片。相反,您希望从类路径加载此图像(最终,从包含打包应用程序的jar内部)。
为此,请使用constructor taking a URL as argument,并传递资源的网址:
new ImageIcon(TrevCard.class.getResource("Ace.png"));
(前提是Ace.png与TrevCard类在同一个包中)
答案 1 :(得分:1)
而不是
label.setIcon(new ImageIcon("Ace.png"));
使用:
java.net.URL imgURL = TrevCard.class.getResource("Ace.png");
label.setIcon(new ImageIcon(imgURL));