java - 我无法显示我的 ImageIcon

标签 java image swing embedded-resource imageicon

这是我的代码

import javax.swing.*;
public class Option extends JFrame{ 

ImageIcon img = new ImageIcon("image.png");
ImageIcon img2 = new ImageIcon("image2.png");
JButton testBut = new JButton(img);
JButton testBut2 = new JButton(img2);
JPanel pnl = new JPanel();

public Option(){
    super("Swing Window");
    setSize( 500,200 );
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    pnl.add(testBut);
    pnl.add(testBut2);
    add(pnl);
    setVisible(true);
}

public static void main(String[] args){
    Option gui = new Option();
}
}

我将两个图像都放在与类文件相同的目录中,并且按钮显示为空白。我对 Java 很陌生,所以我想不出这是错误的任何原因。

编辑

图像与选项类位于同一目录中

最佳答案

"The images are in the same directory as the Option class"

ImageIcon(String) 试图在工作目录的上下文中(从执行程序的位置)查找命名图像,但它将失败,因为图像实际上不存在于其中.

图像包含在应用程序上下文中(当您的应用程序被打包时,图像将嵌入到 Jar 中)。

相反,您应该尝试使用...

img = new ImageIcon(getClass().getResource("image.png"));

来自类的构造函数。这将尝试查找与在应用程序类路径上下文中调用 getResource 的类的包相关的图像

我还鼓励使用 ImageIconImageIO.read 有两个原因,一是保证在调用该方法时加载图像(而不是已在某些后台线程中加载),第二,如果由于某种原因无法加载图像,它将抛出 IOException,这会更有帮助

看看Reading/Loading an Image了解更多详情

关于java - 我无法显示我的 ImageIcon,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26538434/

相关文章:

java - quartz 触发器开始时间早于当前时间

Java 到 Coldfusion SVG 到 PDF

JavaScript 图像弹出窗口

java - 如何删除正在执行的jar文件

java - 日历未验证仅月和日年

java - 使用 Cardlayout 切换到特定的 JPanel

java - 在 AWS Lambda 函数上创建 Parquet 文件

java - 使用 HSQL 请求父实体时过滤一对多子实体

java.io.FileNotFoundException :(Access is denied) convert byte array to image file

image - 检测图像中某种颜色的矩形