2016-05-28 94 views
3

我在將HTML文件加載到我的應用程序上時出現了問題,並且出現在我的Web引擎中。將jar文件中的本地html文件加載到web引擎中

目前,如果我運行我的應用程序扔IntelliJ IDE。 HTML頁面正在正確加載!但是當我做這個項目時,我將該應用程序運行到我的終端。 HTML文件根本沒有被加載。

我的代碼用於將HTML頁面加載到我的Web引擎。

WebEngine we = wv.getEngine(); 
we.setJavaScriptEnabled(true); 
String htmlFile = getClass().getResource("/html/index.html").toExternalForm(); 
System.out.println(">>>"+htmlFile); 
we.load(htmlFile); 

爲什麼我要我的println?檢查我的HTML頁面的路徑。 看來,當我在我的項目IntelliJ上運行它。應用程序正常運行。如下所示:

>>>file:/Developer/Liss-SDE/out/production/liss/html/index.html 

但是,當我在我的終端上。它給我印上了一些我不明白的東西。

>>>jar:file:/Users/damien/Desktop/liss%7cSDE/liss.jar!/html/index.html 

爲什麼它把罐子:開頭?另外他爲什麼要把到我的程序.jar?如果我們與其他印刷品進行比較,則完全不同!

我提取了.jar文件來檢查目錄和HTML文件是否丟失,但一切正常。 那麼我有什麼問題?

+1

'jar:file:/Users/damien/Desktop/liss%7cSDE/liss.jar!/ html/index.html'是['JarURLConnection']( https://docs.oracle.com/javase/7/docs/api/java/net/JarURLConnection.html)用於描述jar中位置的語法。 –

+0

哦,因爲我做了這些東西的時間太長了.. :)我認爲你不需要用下面提到的Jar和FileSystem API來做所有的事情。 'getResource()'已經在爲你工作:爲了獲取文件的內容,使用'getResourceAsStream()'。 –

+0

所以我使用這種方法(導致** InputStream **,我必須將其轉換爲字符串加載到Web引擎? – Damiii

回答

1

所以我解決了這個管理...

而且我認爲這是真誠的一個奇怪的事情......

如果我把所有的代碼全部加載到web引擎的加載中,一切正常......

嘆息

我希望未來的冒險者不會因爲我而得到這個問題......

只要做到這一點:

we.load(this.getClass().getResource("/html/index.html").toExternalForm()); 

我不知道這是否是一個錯誤或不...因爲我沒有改變任何東西到我的項目,除非把此行代碼...

謝謝保羅·希克斯試圖幫助我:)

我發現了一個bug! XD

所以,如果我用鼠標點擊我的.jar,應用程序運行正常!但是,如果我通過編寫java -jar liss.jar來運行.jar拋出終端,那麼看起來應用程序不起作用! xD 我不知道爲什麼真誠......

2

文件的名稱(jar:!)是JAR中文件的URL,如JarURLConnection中所定義。在此上使用getResource()即可正確顯示文件。使用getResourceAsStream()來訪問文件內容,在你的情況下應該足夠了。

您還可以使用java jar API直接訪問jar的內容。在這個java2s tutorial page有一個很好的介紹。對於類路徑中的罐子(這次似乎是這種情況),在ClassgetResource()getResourceAsStream()方法中,將自動使用jar API。

從Java 7開始,FileSystem api已經可用並且隱藏了一些比較尷尬的細節。這個Oracle technote簡要介紹了API以及如何使用它。

片段從該頁面,調整,以你的情況:

import java.util.*; 
import java.net.URI; 
import java.nio.file.Path; 
import java.nio.file.*; 

public class WhatsInMyJarFile { 
    public static void main(String [] args) throws Throwable { 
     // locate file system by using the syntax 
     // defined in java.net.JarURLConnection 
     URI uri = URI.create("jar:file:/Users/damien/Desktop/liss%7cSDE/liss.jar"); 

     try (FileSystem jarfs = FileSystems.newFileSystem(uri)) { 
      Path pathInJarfile = jarfs.getPath("/html/index.html"); 
      doStuff(Files.newInputStream(pathInJarfile)); 
     } 
    } 
} 
+0

但是當我提取我的jar時,html目錄在那裏! IDEA內置爲構建過程 – Damiii

+0

是的,我的html文件在我的jar裏面(至少它出現在我提取它的時候),我用IDEA來構建我的jar。 – Damiii

+0

我對這段代碼感到困惑。首先,因爲它具有絕對路徑,其次,我應該這樣做嗎? – Damiii

相關問題