2017-09-05 452 views
0

我需要使用Spatial illusions javascript库生成符号(以canvas或SVG格式),并在我的java(专有框架)项目中使用该符号。 java脚本代码可用here。我正在使用下面的代码。<eval>:32 ReferenceError:“document”未定义javax.script.ScriptException

public class TestSymbolCreation { 

    public static void main(String args[]) { 
     ScriptEngineManager scriptEngineManager = new ScriptEngineManager(); 
     ScriptEngine scriptEngine = scriptEngineManager.getEngineByExtension("js"); 

     System.out.println(new File(".").getAbsoluteFile()); 

     File file = new File("./src/resources/milsymbol.js"); 
     try { 

      Reader reader = new FileReader(file); 
      scriptEngine.eval(reader); 
      Bindings obj = (Bindings) scriptEngine.eval("var canvasElement = {value : new ms.Symbol('SFG-UCI----D',{size:35}).asCanvas() }; canvasElement;"); 
      Object canvas = obj.get("value"); 
      System.out.println("Canvas =>"+canvas); 

     } catch (FileNotFoundException e1) { 
      // TODO Auto-generated catch block 
      e1.printStackTrace(); 
     } catch (ScriptException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 

} 

但我一直在获取以下例外。如何得到这个工作?有人能帮助我吗?

javax.script.ScriptException: ReferenceError: "document" is not defined in <eval> at line number 32 
    at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:467) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:451) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:403) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:399) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:155) 
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) 
    at TestSymbolCreation.main(TestSymbolCreation.java:30) 
Caused by: <eval>:32 ReferenceError: "document" is not defined 
    at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) 
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) 
    at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) 
    at jdk.nashorn.internal.objects.Global.__noSuchProperty__(Global.java:1432) 
    at jdk.nashorn.internal.scripts.Script$Recompilation$149$403515A$\^eval\_.L:1-1$L:32-8$exports(<eval>:32) 
    at jdk.nashorn.internal.scripts.Script$87$\^eval\_.:program(<eval>:1) 
    at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:640) 
    at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:228) 
    at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:393) 
    at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:446) 
    ... 5 more 
+0

'./src/resources/milsymbol.js'里面是什么? –

+0

@NathanP。它是一个来自https://spatialillusions.com/ – User

+0

的javascript库文件。但是,您必须提供相关代码,以便我们可以为您提供帮助。该文件可能引发异常。 –

回答

0

这是脚本执行程序,所以它不会提供浏览器提供的文档对象。 要使用文档对象,您需要集成可与swing组件集成的第三方浏览器,例如JTidy