跳到主要內容

發表文章

目前顯示的是 十月, 2014的文章

Java 8 Nashorn ArrayIndexOutOfBoundsException

雖然有一段時間沒有發文 不過其實我都還是有寫些草稿,只是一直沒有完整的時間加筆 今天趁這個問題還在時效內,貼出來充版面XD
今天碰到的問題是在Java的scripting engine上跑字串實字(literal notation)會碰到  ArrayIndexOutOfBoundsException 追蹤原因後才發現客戶端使用了JDK8,難怪會有這個跟測試端不同的狀況 如同大家所知,在JDK8後Oracle揮別了過去使用的Rhino,改用新開發的Nashorn 這個例外很難不聯想到新引擎的bug
查了下果然看到類似的問題 然後這是官方的回覆 I can reproduce the problem with 8u20, however it seems to be fixed in  JDK 9 and JDK8u40. You can download a preview release of 8u40 here: https://jdk8.java.net/download.html
這個問題推測會發生在使用數字做為JavaScript物件的屬性時 目前測試還有一種暫時的解法 就是不使用字串實字建立JavaScript物件,而是用Object的Constructor建立 也就是 var obj = {} -> var obj = new Object()
目前看起來可行,當然不保證不會觸發其他的問題 也許new Object()的實作方式是使用Java的Object,所以不會有這問題 猜測歸猜測,如果沒辦法等官方的修正,也許還是可以試試看這方法