2015-12-04 37 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來驗證它。