2007年11月16日 星期五

Applet資源取用問題

很久沒有寫Applet了,上次撰寫相關的程式應該是大學的時候吧!(約...三年前~)

最近因為比賽的關係,需要使用到Applet,只是沒想到...竟然無法在網頁上執行(使用appletviewer可以正常執行)。在網路上找尋相關的資料,發現原來我的程式有使用內部資源(像是圖片...),而Applet因為安全性的關係,需要做簽章(Signature)的動作才可以使用。

簽章方式:
1. 安裝JDK(這樣才會有keytool、jarsigner工具)
2. 產生jar
└ jar cvf file.jar test.class ※file.jar為產生jar檔案名稱
3. 利用keytool產生key(*.crt)
keytool -genkey -alias appletkey ※輸入簽章相關資訊(密碼、姓名...等)
keytool -export -alias appletkey -file appletkey.crt ※產生crt檔,檔名為apu.crt
4. 將jar進行簽證
jarsigner file.jar appletkey ※會要求輸入剛剛簽章時所用的密碼
5. 轉換html
htmlconverter
以上步驟1、3只需要做一次就可以,之後就重覆2、4步驟即可以。

簽章完成後,發現還是無法正確使用資源,原因目前還不清楚(或許是Applet是不允許使用者直接去存取硬碟的資料,而是要直接透過網路的方式下載)。但是如果不進行簽章的動作,連透過http的方式去使用資源,也是會出現access denied的錯誤。

在使用ImageIcon的方式使用圖片,一般會像以下例子去取用資源
ImageIcon img = new ImageIcon("/picture/1.png");
這樣的情況在Applet下,是會出現access denied的錯誤,所以要改成下列的方式去取用資源
URL url = new URL("http://localhost/1.png");
ImageIcon img = new ImageIcon(url);
相關資料參考
JDK Tools and Utilities
JavaWorld

沒有留言: