首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nashorn java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/JSObject

Nashorn java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/JSObject
EN

Stack Overflow用户
提问于 2018-08-06 18:13:08
回答 1查看 2.3K关注 0票数 3

我正在迁移我的Eclipse RCP以使用JDK 8,我大量使用JS ScriptEngine。既然引入了Nashorn,我就必须添加以下行来使importClassimportPackage函数正常工作:

代码语言:javascript
复制
load("nashorn:mozilla_compat.js");

这样做之后,我得到了java.lang.NoClassDefFoundError: jdk/nashorn/api/scripting/JSObject.

我在Eclipse中使用Nashorn。当我从Java调用Javascript函数并尝试使用发送的参数时,就会出现这个问题。我想要发送的参数是一个Javascript函数,我希望在代码的后面执行call

我有以下代码:

TestNashorn.java

代码语言:javascript
复制
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

代码语言:javascript
复制
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);中,尽管我可以成功地import jdk.nashorn.api.scripting.JSObject;

异常消息确切地说:

jdk.nashorn.api.scripting.JSObject不能被com.test.nashorn_1.0.0.qualifier找到

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 14:17:40

所以..。我必须解决我的问题,并且能够在我的代码中使用JSObject。我所做的是:

  • -Dorg.osgi.framework.bundle.parent=ext添加到myproduct.product文件中

这将它添加到我的产品构建中的.ini文件中,该文件揭示了Nashorn API中的类。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51713426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档