2015-04-22 154 views
0

你好我最近改變了我的JavaFX8項目爲Maven一切正常,除了加載躺在JAR旁邊的文件。這工作之前,但沒有更多。Maven Jar文件讀取外部圖像

文件夾結構:

圖標加載位於/目標/圖標JAR文件位於/目標

我的代碼讀取這些文件是如下:

String applicationDir = (new File(".")).getAbsolutePath(); 
    String iconsDir = applicationDir+"/target/icons/"; 
    File[] files = new File(iconsDir).listFiles(); 


    for (File file : files) { 

     if (file.getName().endsWith(".png")) { 
      System.out.println(file.getAbsolutePath()); 

      Image img = new Image(file.getAbsolutePath()); 
      ICONLIBRARY.put(file.getName().split("\\.")[0].toUpperCase(), img); 
     } 

    } 

它進入循環並查找文件,但當新圖像(file.getAbsolutePath())被 調用時會崩潰無效的URL:未找到無效的URL或資源異常。

我試過toExternalForm()等所有類型的東西,但沒有任何幫助,我仍然得到異常,無論我做什麼。

我真的迷失了,也許你可以給我提示我做錯了什麼。

在此先感謝

ROBI

+0

您在哪裏可以在源代碼樹中找到這些圖標? – khmarbaise

+0

你好這個圖標旁邊這裏的jar文件,例如完整路徑 : /Users/robi/git/projectxy/target/icons/icon_small.png 罐子是 /用戶/ ROBI /混帳/ projectxy /target/jarfile.jar 但正如我所說的找到文件的循環正在工作只是爲了傳遞文件名到圖像失敗 –

回答

0

試試這個:

URL resource = YourClass.class.getResource("FILENAME"); 
Paths.get(resource.toURI()).toFile(); 

這隻要資源實際上是一個文件,而不是一個JAR條目找到任何資源。

+0

這隻會在圖標打包到看起來不像它的jar文件時才起作用。 – khmarbaise

+0

的確,我想讓他們分開,因爲客戶應該能夠更改圖標。 –

1

嘿,夥計們,我明白了!

的解決方案是:

Image img = new Image(file.toURI().toString()); 

感謝您的幫助

是什麼奇怪的,它使從哪個目錄我運行Java的罐子jarfile.jar它只能如果我差在相同的文件夾中執行此操作