Tôi cố gắng để chạy một kịch bản javascript với mới Java 8 Nashorn động cơ javascript nhưng nó không thành công với các lỗi sau:readFully không được định nghĩa với Java Nashorn Javascript cơ
<eval>:1 ReferenceError: "readFully" is not defined
Các kịch bản sử dụng hàm readFully rằng nên được định nghĩa trong phạm vi toàn cầu nashorn được chạy với chế độ kịch bản được kích hoạt (mặc định là khi chạy qua một ScriptEngine như được thấy ở đây http://mail.openjdk.java.net/pipermail/nashorn-dev/2013-December/002562.html).
Đây là một mẫu để sao chép các lỗi:
import java.io.FileNotFoundException;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Test {
public static void main(String[] argv) throws FileNotFoundException, ScriptException {
ScriptEngine scriptEngine = new ScriptEngineManager().getEngineByName("nashorn");
scriptEngine.eval("print('Hey!');print(print);print(readFully);");
}
}
mẫu này in Hey! và sau đó là mã nguồn của chức năng in (chức năng tích hợp nashorn khác) và cuối cùng nó sẽ in mã nguồn của phương thức readFully. Nhưng tôi có ngoại lệ này thay vì:
Exception in thread "main" javax.script.ScriptException: ReferenceError: "readFully" is not defined in <eval> at line number 1
at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:586)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:570)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:525)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:521)
at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:192)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
at com.github.bringking.maven.requirejs.Test.main(Test.java:14)
Caused by: <eval>:1 ReferenceError: "readFully" is not defined
at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:58)
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:320)
at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:292)
at jdk.nashorn.api.scripting.NashornScriptEngine.__noSuchProperty__(NashornScriptEngine.java:272)
at jdk.nashorn.internal.scripts.Script$engine.L:35(nashorn:engine/resources/engine.js:37)
at jdk.nashorn.internal.scripts.Script$\^eval\_.runScript(<eval>:1)
at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:535)
at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:209)
at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:378)
at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:568)
... 5 more
Khi kịch bản mẫu được chạy với dòng lệnh nashorn với tham số -scripting (với công cụ JJS của jdk), tất cả đều tốt. Đây là kết quả của kịch bản giống nhau:
Hey!
function print() { [native code] }
function readFully() { [native code] }
tôi có thể viết lại một phương pháp readFully và ràng buộc nó với bối cảnh kịch bản, nhưng tôi thích để hiểu tại sao nó không hoạt động và sử dụng các chức năng đã được tích hợp sẵn.
Trân
gì JDK bạn đang sử dụng? Oracle hoặc OpenJDK? –
Orcale JDK trên Windows 7: phiên bản java "1.8.0_25", Java (TM) SE Runtime Environment (xây dựng 1.8.0_25-b18), Java HotSpot (TM) Máy khách (xây dựng 25,25-b02, chế độ hỗn hợp) – Stratehm
Blog bài đăng bạn đã liên kết đến là re: openjdk. Chúng vẫn khác một chút. –