私は、新しいJava 8 NashornではJavaScriptエンジンをJavaScriptのスクリプトを実行しようとしていますが、それは次のエラーで失敗します。のreadFully JavaのNashornのJavascriptエンジンで定義されていない
<eval>:1 ReferenceError: "readFully" is not defined
スクリプトがすべきのreadFully機能を使用していますグローバルスコープ内で定義することができます。nashornはスクリプトモードを有効にして実行されます(ここではhttp://mail.openjdk.java.net/pipermail/nashorn-dev/2013-December/002562.htmlのようにScriptEngineを実行しているときにデフォルトになっています)。ここで
は、エラーを再現するためのサンプルです:
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);");
}
}
このサンプルプリントがねえ! print関数のソースコード(別のナショーン組み込み関数)を呼び出し、最後にreadFullyメソッドのソースコードを出力します。しかし、私は代わりに、この例外があります:サンプルスクリプトは、(JDKのJJSツールを使用して)-scriptingパラメータとnashornコマンドラインで実行すると
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
、すべての罰金です。ここでは同じスクリプトの結果である:
Hey!
function print() { [native code] }
function readFully() { [native code] }
私はreadFullyメソッドを書き換えて、スクリプトのコンテキストでそれを結合することができるが、私はそれが動作すると、すでに組み込み関数を使用していない理由を理解することを好みます。
よろしく
あなたは何JDKを使用していますか? OracleまたはOpenJDK? –
Windows 7のOrcale JDK:Javaバージョン「1.8.0_25」、Java(TM)SEランタイム環境(ビルド1.8.0_25-b18)、Java HotSpot(TM)クライアントVM(ビルド25.25-b02、混合モード) – Stratehm
ブログあなたがリンクした投稿はre:openjdkです。彼らはまだ少し違います。 –