将文件分配到映像编译错误:javax.imageio.IIOException

将文件分配到映像编译错误:javax.imageio.IIOException,java,swing,Java,Swing,我正在尝试使用swing指定一个图像作为背景。我找到了多种方法来解决这个问题,但我似乎总是遇到同样的问题。我在这里找到了一个很好的自定义类> 这是我正在使用的代码 编辑代码:添加了构造函数 这是图像的样子 当我试图运行这段代码时,我得到一个编译错误错误:(14,51)java:不兼容的类型:java.io.File无法转换为java.lang.String。如果有人能帮我做这件事,我将不胜感激 在同一个项目中,这是我用来使图像显示为标签(相同位置)的代码行,它工作>charimgalabel.

我正在尝试使用swing指定一个图像作为背景。我找到了多种方法来解决这个问题,但我似乎总是遇到同样的问题。我在这里找到了一个很好的自定义类>

这是我正在使用的代码

编辑代码:添加了构造函数

这是图像的样子

当我试图运行这段代码时,我得到一个编译错误
错误:(14,51)java:不兼容的类型:java.io.File无法转换为java.lang.String
。如果有人能帮我做这件事,我将不胜感激


在同一个项目中,这是我用来使图像显示为标签(相同位置)的代码行,它工作>
charimgalabel.setIcon(新的ImageIcon(新的javax.swing.ImageIcon(getClass().getResource(image)).getImag‌​e().getScaledInstanc‌​e(100100,../images/Character.png“.SCALE_SMOOTH))

好的,让我们先看一下明显的编译器错误

我假设
image
是当前类加载器上下文中图像路径的
字符串
引用,这意味着

img = ImageIO.read(f);
实际上应该是

img = ImageIO.read(getClass().getResource(image));

假设图像存储在类加载器上下文(即Jar/classpath)中,并且您指定的路径正确,那么这将加载您的图像

错误是不言自明的,无法找到文件。问题是,与项目和类文件相关的文件存储在何处,代码从何处执行,与文件在同一项目中的存储位置相关,这是我用来使图像显示为标签(相同位置)的代码行,它工作>
charImgLabel.setIcon(new ImageIcon(新建javax.swing.ImageIcon(getClass().getResource(image)).getImage().GetScaleInstance(100100,../images/Character.png.SCALE_SMOOTH));
Then
img=ImageIO.read(f);
应读
img=ImageIO.read(getClass().getResource(image))
-我还想指出,您刚刚发布的代码不会编译为
Image#getScaledImage
提示
属性是
int
而不是
字符串
…因此,我不知道这是否有意义,但现在我得到了错误
非静态方法getClass()无法从静态上下文中引用,因为您在
main
中执行所有工作,而
main
中没有类实例可使用。您可以尝试改用
TestMainnet.class
,尽管它可能会给出不同的结果,但这就是为什么我不喜欢在
static
上下文中工作:P
img = ImageIO.read(getClass().getResource(image));