簡體   English   中英

ImageIcon在Java中加載

[英]ImageIcon Loading in Java

我搜索了Google,SE和Oracle的文檔,以獲取有關如何執行此操作的信息,但我似乎無法使其工作。

我找到了幾個關於是否使用getResource()getResourceAsStream()以及如何格式化文件名的帖子,但沒有我可以應用於我的情況。

我的目錄結構如下所示(資源文件夾中有一些額外的級別):

Root Folder
|
|_____ bin (compiled .class files go here)
|
|_____ src
|         |
|         |_____ packageA
|         |         |
|         |         |_____ packageAa
|         |                   |
|         |                   |_____ images.java
|         |                   |
|         |                   |_____ resources
|         |                             |
|         |                             |_____ icon1.gif
|         |
|         |_____ packageB
|         |
|         ... (More packages with sub-packages)
|
|_____ resources (should it go here?)
          |
          |_____ icon2.gif

在我的實際程序中,我有107個gif圖像,文件名可以從對象值派生。 這些圖像目前位於兩個資源文件夾中,因為我一直在玩這兩個圖片以試圖讓它們工作。

我當前的代碼試試這個:

String imageFileName = getFileName(obj);  // returns a string such as "/resources/cardImages/acespades.gif"
URL imageURL = getClass().getClassLoader().getResource(imageFileName);
ImageIcon icon = new ImageIcon(imageURL);

無論前導反斜杠如何,我都會得到一個空指針異常。

我應該如何格式化文件名和/或創建一個URL對象來獲取圖像?

注意:我使用Sublime Text 3和Javatar來編譯我的代碼。 文件夾結構(bin文件夾)由Javatar創建。 我的“源文件夾”設置為src ,上面顯示的“根文件夾”是我的閃存驅動器。

================================================== ==
編輯:

我嘗試了彼得的建議,結果如下:

URL imageURL = getClass().getResource("resources/cardImages/back1.gif");
System.out.println(imageURL);
ImageIcon icon = new ImageIcon("resources/cardImages/back1.gif");

println語句打印出null,但ImageIcon會正確顯示圖像。 據我所知,這會從.java文件旁邊的文件夾中加載圖像。

URL imageURL = getClass().getResource("/resources/cardImages/back1.gif");
System.out.println(imageURL);
ImageIcon icon = new ImageIcon("/resources/cardImages/back1.gif");

println仍然打印null,但現在不顯示圖像。 我復制並粘貼了整個資源文件夾,以確保它們在兩個位置都相同。

在類上加載資源時,路徑相對於包路徑,除非您有一個前導斜杠/。

至於你的icon1.gif,使用

URL url = getClass().getResource("resources/icon1.gif");

應該返回正確的URL。

我建議將Java源和資源分開。 如果resources是源文件夾(其輸出文件夾是bin / JAR的根目錄),請使用:

URL url = getClass().getResource("/icon2.gif");

(注意前面的斜線)。


編輯 (問題更新):
更正了第二個URL(資源是源文件夾,icon2.gif位於其根目錄中)。
我剛剛在Eclipse中驗證了它,並且我得到了兩個變體的正確(非空)URL。 使用ImageIcon的URL也可以得到正確的結果,並顯示圖像。

  • 確保resources是源文件夾。 並非所有項目文件都位於輸出文件夾(通常是bin )和稍后的JAR中。
  • 檢查輸出文件夾以驗證它是否包含已編譯的類以及資源。 源和輸出文件夾(Eclipse)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM