2011-07-17 89 views
-1

我有一個基於應用程序的JApplet。我需要它讀取包含所有數據的基於文本的文件。所以我將它卡在Jar文件中,並且AppletViewer中的一切都變得快樂起來。JApplet在Jar文件中只能從Jar文件中包含的html運行

不幸的是,並非所有的瀏覽器都很開心。

當我嘗試運行從一個html頁面是不是在罐子瀏覽器的小程序,然後我得到了很好的老:java.security.AccessControlException:訪問被拒絕(java.io.FilePermission中

(然後它列出了我的文件系統上的jar的位置和!資源地址)

但是,如果我打開jar文件,像winzip這樣的zip提取器/查看器,並打開啓動applet的頁面(我把在jar裏面)工作的很好,正如預期的那樣,它只能訪問具有相同主機的資源,在這種情況下,它似乎是直接傳遞給jar文件本身的。

所以我的問題是WTF?我可以從瀏覽器中打開jar文件中的html文件嗎?即使在iframe中也可以,只要它不會進一步搞亂權限。

或者我可以從jar外的html頁面調用applet嗎?我現在不使用JNLP,因爲我想盡快拼湊一個原型applet。

<applet code = 'CatalogApplet' 
archive = 'ContactCatalog.jar', 
width = 1000, 
height = 800 /> 

是對applet的HTML調用的通用性。

我不打算簽署它,因爲它確實不需要簽名。我只是想回電話給jar。

+0

你的問題沒有任何意義。 HTML文件告訴瀏覽器關於JAR文件,而不是其他方式。你的意思是說你不能從你的applet中訪問JAR文件中的其他*資源?請澄清你的問題。 – EJP

+0

我想要一種方式來從jar中,從瀏覽器,而不是任何java代碼運行html。我不知道爲什麼,但我似乎無法獲得非空的AppletContext,所以我必須訴諸怪異的東西來將文本或圖像加載到小程序中。這恰好是一個非常奇怪的工作。 –

+0

這完全沒有意義。瀏覽器無法在JAR中看到HTML文件。它所能做的只是執行一個JAR中的applet。如果沒有「Java代碼」,則沒有小程序,所以也沒有AppletContext。這沒有任何意義。 – EJP

回答

1

該文件應該通過URL訪問,而不是通過FileInputStream訪問。使用這個來獲取網址:

URL urlToText = this.getClass().getResource("path/to/the.html"); 

這將工作在一個沙盒小程序。

+0

呃,我不想從java代碼中調用html,我想從瀏覽器中調用jar裏面的html。 –

+0

我仍然覺得你的解釋要像泥巴一樣清楚。也許如果你解釋了*爲什麼*你試圖做你想做的事情,它會使它更加清晰。 –

0

乾淨的方法是: 將你的「.class」文件打包成jar。在jar外面有一個html文件,它引用了applet標籤中的jar。如果您的小程序需要訪問用戶文件系統,那麼正確的方法是簽署您的小程序jar。見http://java.sun.com/developer/onlineTraining/Programming/JDCBook/signed.html

+0

它們被封裝在一個jar文件中,但不幸的是,如果我在jar外有一個html文件,那麼代碼不能再加載jar中的資源。 (即使你的代碼在罐子裏。) –