2012-01-07 69 views
0

我有一個加載圖像下面的代碼片段:的getResource,圖像寬度返回-1

String imgName = "/assets/" + name; 
    URL imgURL = Groovy.class.getResource(imgName); 
      System.out.println(imgURL.getPath()); 
    Toolkit tk = Toolkit.getDefaultToolkit(); 
    Image image = tk.getImage(imgURL); 
    return image; 

及圖片繪製:

 Graphics2D g = (Graphics2D) strategy.getDrawGraphics(); 
     g.setColor(Color.black); 
     g.fillRect(0,0,screenWidth,screenHeight); 
     g.drawImage(background, 0, 0, null); 
     System.out.println(background.getWidth(null)); 
     if (background.getWidth(null) < 0) 
      System.exit(1); 

然而imgUrl的總是返回null。我正在使用Eclipse(並且對它很新鮮),並運行帶有運行或調試選項的類。如果我改變了路徑,它會給出一個沒有找到文件的異常。

文件結構如下:

項目 - > src和資產 - > SRC有Groovy中,資產具有圖像 - > Groovy中有Groovy.class

編輯:我切換回Netbeans的。 imgURL現在加載正常,getPath返回它的正確路徑。但圖像寬度/高度返回-1。這是現在的實際問題。

編輯:-1表示寬度尚未知道,但顯示圖像顯示白色屏幕。

+0

你能澄清一下,你的班級文件究竟在哪兒,哪些地方恰好是圖片?也許在Eclipse的package explorer中發佈這些人的圖片。 – 2012-01-07 20:25:59

+0

您更改了IDE,並且現在沒有工作的Java代碼現在可用? Java是Java,而IDE與你的問題無關。按照Hovercraft Full Of Eels的要求發佈你的文件夾和文件樹的截圖。 – 2012-01-07 20:48:54

+0

http://imageshack.us/photo/my-images/6/screenshotat20120107215.png/ – RobotRock 2012-01-07 20:55:36

回答

0

問題在於使用工具包來獲取圖像,可能是因爲我在使用OpenJDK?無論如何,使用ImageIO.read(imgURL)解決了這個問題。

1

Javadoc救援:

代表團之前,絕對的資源名稱是從 給定的資源名稱中使用這種算法構建:如果名字以「/」('開始

\ u002f'),那麼資源的絕對名稱就是'/'後面的名稱部分。 否則,絕對名稱是以下形式的:

 modified_package_name/name 

凡modified_pa​​ckage_name是該對象以「/」取代的>爲的包名「」 ( '\ u002e')。

總之:相對路徑不能使用..來升級。使用絕對名稱(從類路徑的根目錄開始,以/開頭)。

此外,getResource從類路徑加載資源。如果圖像不在類路徑中,它將不起作用。你的文件樹根本不清楚,但似乎你還沒有明白類路徑是什麼。如果要從文件系統加載文件,請使用文件IO,而不是資源。

相關問題