簡體   English   中英

調用匿名JavaScript函數

[英]Call anonymous JavaScript function

我當前的JavaScript看起來像這樣:

o.timer(function (){
    //Call from Java
    print("Hello World");
}).start(1000);

在Java端,收到我嘗試調用的jdk.nashorn.internal.runtime.ScriptFunction女巫

ScriptFunction callback = ...
callback.getBoundInvokeHandle(MethodType.methodType(Object.class)).invoke();

但是它拋出了這個:

java.lang.IllegalStateException: no current global instance
at jdk.nashorn.internal.objects.Global.instance(Global.java:474)
at jdk.nashorn.internal.objects.ScriptFunctionImpl.<init>(ScriptFunctionImpl.java:145)
at jdk.nashorn.internal.scripts.Script$\^eval\_._L3(<eval>:6)
at demo.Mainr$1.run(Main.java:38)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)

如何調用此功能?

不要在Nashorn和Java之間傳遞函數。 傳遞實現功能接口的對象。

我假設o.timer是用Java實現的。 在這種情況下,請將其參數設置為Runnable (函數的通用函數接口,該函數不接收任何內容且不返回任何內容)。 Nashorn將檢測到Java需要一個功能接口,並能夠將功能自動轉換為實現該接口的匿名類,因此您無需在Javascript代碼中進行任何更改即可實現此目的。

然后,在Java代碼中,可以使用.run()執行該Runnable的腳本功能。 然后,將在創建JavaScript腳本的上下文中執行javascript代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM