2017-04-20 17 views
0

我想分配一个图像作为背景与摆动。我找到了多种方法来做到这一点,但我似乎总是遇到同样的问题。我找到了一个不错的自定义类在这里使用>http://www.camick.com/java/source/BackgroundPanel.java将文件分配给图像编译错误:javax.imageio.IIOException

这里是我使用的代码...

编辑代码:新增构造

import javax.imageio.ImageIO; 
import javax.swing.*; 
import java.awt.*; 
import java.io.File; 
import java.io.IOException; 

public class TestMain { 
    TestMain(){ 
     JFrame frame = new JFrame("Test"); 
     Image img = null; 
     File f = new File("../images/Background.png"); 
     img = ImageIO.read(getClass().getResource(f)); 
     System.out.println("File " + f.toString()); 


     BackgroundPanel background = new BackgroundPanel(img, BackgroundPanel.SCALED, 0.50f, 0.5f); 

     frame.setContentPane(background); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     frame.setSize(200, 100); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) throws IOException{ 
     new TestMain(); 
    } 
} 

这里是什么形象看起来像......

enter image description here

当我尝试运行这段代码,我GE编译错误Error:(14, 51) java: incompatible types: java.io.File cannot be converted to java.lang.String。如果有人能想出如何帮助我做到这一点,将不胜感激。

+0

错误i自我解释,文件无法找到。问题是,文件存储在与项目和类文件的关系中,从何处执行代码,与文件存储位置的关系 – MadProgrammer

+0

在同一个项目中,这是我正在使用的代码行使图像显示一个标签(相同的位置),它的工作原理是''charImgLabel.setIcon(new ImageIcon(new javax.swing.ImageIcon(getClass()。getResource(image))。getImage()。getScaledInstance(100 ,100,“../ images/Character.png”.SCALE_SMOOTH)));' –

+0

Then'img = ImageIO.read(f);'should read'img = ImageIO.read(getClass()。getResource(image) );' - 我也想指出刚刚发布的代码不会编译为'Image#getScaledImage'的'hint'属性是一个'int'而不是'String' ...所以,我不知道 – MadProgrammer

回答

1

In the same project, this is the line of code I'm using to make the image show up for a label (same location), and it works >charImgLabel.setIcon(new ImageIcon(new javax.swing.ImageIcon(getClass().getResource(image)).getImag‌​e().getScaledInstanc‌​e(100, 100, "../images/Character.png".SCALE_SMOOTH)));

好吧,让我们看看那里的明显编译错误一秒钟。

我假定imageString参考当前类装载器范围内的图像的路径,这意味着

img = ImageIO.read(f); 

实际上应该是

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

假设图像被存储内类加载器上下文(即jar/classpath)和你指定的路径是正确的,那么这应该加载你的图像