2015-12-04 39 views
0

我想图像添加到一个JPanel类,我使用的方法getResource()但它返回Exception in thread "main" java.lang.IllegalArgumentException: input == null!,因为路径到我给的图像文件夹是无效的,现在我要如何获得有效的路径,我意识到也许这很容易,这不是我要问的问题,但我花了很多时间并尝试不同的路径,但它不起作用;java如何使用getResource()添加图像?

这里的JPanel类

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


public class Application extends JPanel { 

    private BufferedImage image; 

    public Application() { 
      try { 
       image = ImageIO.read(getClass().getResource("/ressources/image.png")); 
      } catch (IOException ex) { 
       System.out.println("problem! image can't be loaded!"); 
      } 
    } 

    @Override 
    protected void paintComponent(Graphics g) 
    { 
     super.paintComponent(g); 
     g.drawImage(image, 0, 0, null); 
    } 
} 

,这里的主类

import javax.swing.*; 
//import java.awt.*; 

public class mainClass { 

     public mainClass() { 

      JFrame app = new JFrame(); 
      app=.setTitle("main window"); 
      app=.setSize(400, 400); 
      app=.setLocationRelativeTo(null); 
      app=.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
      app=.add(new Application()); 
      app=.setVisible(true); 
     } 

     public static void main(String[] args) { 
      mainClass class = new mainClass(); 
     } 
    } 

错误显然是在该行 image = ImageIO.read(getClass().getResource("/ressources/image.png"));

原因的路径无效, 我用一个maven项目,所以这个类的路径是: pr ojectName的\ src \主\ java的\程序\ mainClass.java PROJECTNAME的\ src \主\ java的\程序\ Application.java

我创建了一个文件夹 “ressources” 我把图像还有,这里的路径 PROJECTNAME \ ressources \ image.png

谢谢。

+0

根据您的目录结构,我假设你使用Maven。要添加到jar中的资源(可以通过'getResources'访问)应放在'projectName \ src \ main \ resources'中,然后可以通过省略“resources”目录名来访问它们。例如,如果你有一个名为'PROJECTNAME资源的\ src \主\资源\ Image.png',你会再使用使用'的getClass()的getResource( “/ Image.png”);' – MadProgrammer

+0

@MadProgrammer现在我懂了,谢谢你。 – cbInfo009

+0

你的意思是“资源”?错字是否会导致问题? –

回答

0

把ressources在src文件夹中的文件夹。

2

您需要将您的图像中的src/main /资源/ image.png它被视为该项目的资源根本....观看的ressource的那拼写。请参阅http://www.mkyong.com/java/java-read-a-file-from-resources-folder/以获取有关资源加载的完美摘要。

,这一行应该工作;

图像= ImageIO.read(的getClass()。getClassLoader()。的getResource( “image.png”)的两个艾丹和阿布是正确的,但有一点我们可以澄清这里

0

答案。

一个项目的标准根文件夹被定义为 “SRC”(JavaProject/src目录),所以我们只可以把image.png此文件夹,然后键入:

1st method: image = ImageIO.read(new File("image.png")); 

FR OM来看你的程序的点(在Eclipse)这个yould给出相同的结果,因为这:

2nd method: image = ImageIO.read(getClass().getClassLoader().getResource("image.png")); 

现在,所不同的是,当你将你的项目导出在的.jar文件 ,第一行不会导出image.png文件,因为导出只会首先编译资源,并且您将收到错误,因为程序无法再看到图像。这是第二种方法有用的地方。因为它在你的jar文件里面也输出图像。你可以在里面看着winrar来验证它。