[英]java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/NashornScriptEngineFactory
[英]Nashorn java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/JSObject
我正在將Eclipse RCP
遷移為使用JDK 8
並且大量使用了JS ScriptEngine
。 現在介紹了Nashorn
,我必須添加以下行以使importClass
和importPackage
函數正常工作:
load("nashorn:mozilla_compat.js");
這樣做之后,我得到了java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/JSObject
。
我在Eclipse RCP中使用Nashorn。 當我從Java
Javascript
調用Java
函數並嘗試使用發送的參數時,會發生問題。 我要發送的參數是一個Javascript
函數,我想稍后在代碼中執行call
。
我有以下代碼:
TestNashorn.java
package com.test.nashorn;
import java.io.FileNotFoundException;
import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.Invocable;
import jdk.nashorn.api.scripting.JSObject;
public class TestNashorn {
public static void main(String[] args) {
ScriptEngine engine = (new ScriptEngineManager()).getEngineByName("js");
try {
engine.eval(new FileReader("C:/Users/user/workspace_nashorn/TestNashorn/src/com/test/nashorn/test.js"));
Object o = ((Invocable)engine).invokeFunction("generate");
} catch (ScriptException | FileNotFoundException | NoSuchMethodException e) {
e.printStackTrace();
}
}
public static int test(JSObject o1) {
System.out.println(o1.getClass().toString());
JSObject som = ((JSObject)o1);
return 1;
}
}
test.js
load("nashorn:mozilla_compat.js");
importClass(com.test.nashorn.TestNashorn);
function generate()
{
function asd(variablex) { print('Hello, ' + variablex); }
var result = TestNashorn.test(asd);
}
該問題發生在JSObject som = ((JSObject)o1);
行JSObject som = ((JSObject)o1);
,盡管我可以成功import jdk.nashorn.api.scripting.JSObject;
。
異常消息正好說:
com.test.nashorn_1.0.0.qualifier無法找到jdk.nashorn.api.scripting.JSObject
所以..我必須解決我的問題,並且能夠在我的代碼中使用JSObject
。 我所做的是以下幾點:
myproduct.product
文件中添加了-Dorg.osgi.framework.bundle.parent=ext
這將其添加到我的產品版本的.ini
文件中,該文件顯示了Nashorn
API中找到的類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.