因為之前是用
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var hasJava = false;
if (deployJava.versionCheck('1.6+')) {
hasJava = true;
attributes = { id:'applet', code:'applet.class', archive:'applet.jar', width:0, height:0} ;
parameters = {jnlp_href: 'applet.jnlp'} ;
deployJava.runApplet(attributes, parameters, '1.6');
} else {
//document.location.href="http://java.sun.com";
//alert('you not have java');
hasJava = false;
}
</script>
來執行applet
但是用此方法有個很大的缺點,就是無法動態載入
如果要讓網頁點名某個按鈕才載入applet的話,用此方法是不行的
要改用另一種方式來建立
var app = document.createElement('applet');
app.id= 'AsFileTransferApplet';
app.archive= 'applet.jar, gson-2.1.jar';
app.code= 'asustor.AsFileTransferApplet';
app.width = '0';
app.height = '0';
//document.getElementsByTagName('body')[0].appendChild(app);
document.getElementById('appletContent').appendChild(app);
重點在於使用deployJava時會利用jnlp來設定一些資訊包括會使用到的jar檔
而用createElemnet方法建立時必須把相關定義在jnlp中使用的jar檔也加進來才行
否則呼叫到方法時就會出現java.lang.reflect.InvocationTargetException
所以當使用applet發生java.lang.reflect.InvocationTargetException記得先檢查你所設定的archive是不是正確的喔
為了這個問題花了我快二天的時間,網路上也找不到比較詳細的說明orz
另外因應不同瀏覽器要使用的語法不盡相同(applet, embed, object),這部份就留給大家去研究吧