1

我想在我的 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());

}

}
4

2 回答 2

2

您正在使用的ImageIcon 构造函数将文件名作为参数。因此,此构造函数尝试在磁盘上的当前目录中找到此文件(因为您传递的路径是相对路径)。当前目录不是 Java 源文件所在的目录。它是启动用于执行应用程序的 java 命令的目录。

您不想使用文件 IO 来加载图像。相反,您希望从类路径加载此图像(最终,从包含打包应用程序的 jar 内部)。

为此,请使用以 URL 作为参数的构造函数,并传递资源的 URL:

new ImageIcon(TrevCard.class.getResource("Ace.png"));

(前提是 Ace.png 与 TrevCard 类在同一个包中)

于 2013-04-11T21:56:39.900 回答
1

代替

label.setIcon(new ImageIcon("Ace.png"));

利用:

java.net.URL imgURL = TrevCard.class.getResource("Ace.png");
label.setIcon(new ImageIcon(imgURL));
于 2013-04-11T21:55:54.790 回答