最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Access object variable in Java Nashorn - Stack Overflow

programmeradmin1浏览0评论

I have an object in my script, that contains fields and methods. I can call the methods in Java with invokeMethod() but can't seem to get the content of the fields of the object. I've got this JavaScript code:

var Test = { 
    TestVar: "SomeTest", 

    TestFunc: function() {
        print("Hello");
    }
};

In this Java Class:

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class ScriptTest {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        try {
            engine.eval("var Test = { TestVar: \"SomeTest\", TestFunc: function() { print(\"Hello\");}};");
        } catch (ScriptException e) {
            e.printStackTrace();
            System.exit(1);
        }

        System.out.println(engine.get("Test"));
        System.out.println(engine.get("Test.TestVar"));
        System.out.println(engine.get("Test[TestVar]"));
        System.out.println(engine.get("Test[\"TestVar\"]"));

        Invocable inv = (Invocable) engine;

        try {
            inv.invokeMethod(engine.get("Test"), "TestFunc");
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

This gives me the output

[object Object]
null
null
null
Hello

Is there any way I can access the TestVar variable directly?

I have an object in my script, that contains fields and methods. I can call the methods in Java with invokeMethod() but can't seem to get the content of the fields of the object. I've got this JavaScript code:

var Test = { 
    TestVar: "SomeTest", 

    TestFunc: function() {
        print("Hello");
    }
};

In this Java Class:

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

public class ScriptTest {
    public static void main(String[] args) {
        ScriptEngineManager manager = new ScriptEngineManager();
        ScriptEngine engine = manager.getEngineByName("JavaScript");

        try {
            engine.eval("var Test = { TestVar: \"SomeTest\", TestFunc: function() { print(\"Hello\");}};");
        } catch (ScriptException e) {
            e.printStackTrace();
            System.exit(1);
        }

        System.out.println(engine.get("Test"));
        System.out.println(engine.get("Test.TestVar"));
        System.out.println(engine.get("Test[TestVar]"));
        System.out.println(engine.get("Test[\"TestVar\"]"));

        Invocable inv = (Invocable) engine;

        try {
            inv.invokeMethod(engine.get("Test"), "TestFunc");
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (ScriptException e) {
            e.printStackTrace();
        }
    }
}

This gives me the output

[object Object]
null
null
null
Hello

Is there any way I can access the TestVar variable directly?

Share Improve this question asked May 19, 2015 at 14:47 GeminusGeminus 1561 silver badge9 bronze badges
Add a ment  | 

1 Answer 1

Reset to default 6

Either:

engine.eval("Test.TestVar");

or

((JSObject)engine.get("Test")).getMember("TestVar");

should work.

发布评论

评论列表(0)

  1. 暂无评论