小程序。java.lang.reflect.InvocationTargetException
好的,現(xiàn)在我們來(lái)探究問(wèn)題的根源。(您仍然可以使用printstacktrace-這也應(yīng)該已經(jīng)打印的堆棧跟蹤cause。)。
未簽名的小程序只能訪問(wèn)有限數(shù)量的系統(tǒng)屬性-這些jna屬性不屬于這些屬性。
在未簽名的applet中,無(wú)論如何您都無(wú)法加載本機(jī)庫(kù),因此無(wú)法使用JNA(或JNI)。
如果您在applet上簽名(并告訴插件接受簽名),則applet具有使用JNA的必要權(quán)利。但是,任何單個(gè)運(yùn)行代碼的權(quán)利實(shí)際上就是稱為當(dāng)前代碼的所有方法的權(quán)利的交叉點(diǎn)。
從JavaScript調(diào)用的Applet方法具有非常有限的權(quán)限(因?yàn)榧词鼓臑g覽器甚至具有這種概念,插件也無(wú)法真正檢查JavaScript代碼是否具有必需的權(quán)限)。
您可以通過(guò)包裝代碼的一部分來(lái)解決此問(wèn)題,該代碼部分需要在applet的權(quán)限下運(yùn)行AccessController.doPrivileged(...)。但是首先 (對(duì)于JNI / JNA來(lái)說(shuō)很容易),即使是從惡意JavaScript代碼中調(diào)用也是如此。
解決方法我有使用jna指針類的小程序。小程序代碼為:
import com.sun.jna.*;public class Applet1 extends Applet{ public void test() {try { Pointer p = new Memory(73);} catch (Exception e) {e.printStackTrace();} }}
在html代碼中,我以這種方式聲明了applet:
<applet codebase=/pki/ code=Applet1.class archive=/pki/jna-3.2.3.jar id=Applet1 width=100 height=100 ></applet>
當(dāng)我通過(guò)JavaScript調(diào)用document.getElementById(“Applet1”)。test()時(shí),會(huì)出現(xiàn)java.lang.reflect.InvocationTargetException。我無(wú)法在Java類端調(diào)用e.getCause(),因?yàn)閍pplettry / catch無(wú)法捕獲錯(cuò)誤(我不明白為什么)。但是javascript try / catch捕獲此錯(cuò)誤。如果移動(dòng)Pointer p = newMemory(73);線就可以了。問(wèn)題是這條線。請(qǐng)幫助解決問(wèn)題。
編輯:如果替換此塊:
try { Pointer p = new Memory(73);} catch (Exception e) { e.printStackTrace();}
至
try { Pointer p = new Memory(73);} catch (Throwable e) { System.out.println(e.getCause());}
我收到了java.security.AccessControlException:訪問(wèn)被拒絕(已讀取java.util.PropertyPermissionjna.boot.library.path)
相關(guān)文章:
1. windows - idea提示錯(cuò)誤:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver2. python - nginx 小白, nginx 啟動(dòng)后 80 端口無(wú)法訪問(wèn)3. java - 部署web項(xiàng)目時(shí)無(wú)法省略項(xiàng)目名?4. java-ee - JAVA8 lambdas表達(dá)式 改變外面變量的值5. java - 安裝visibroker時(shí)報(bào)錯(cuò)6. javascript - 關(guān)于nodejs處理并發(fā)的一點(diǎn)小疑惑7. java - JPA連接數(shù)據(jù)庫(kù),一段時(shí)間沒(méi)有數(shù)據(jù)操作會(huì)關(guān)閉連接,再次訪問(wèn)就會(huì)拋出異常,如何解決?8. java - svn導(dǎo)下來(lái)的項(xiàng)目,web-inf下怎么沒(méi)有l(wèi)ib文件呀?9. javascript - vue-cli proxyTable怎么配置10. css3 - css做動(dòng)畫(huà)效果
