gpt4 book ai didi

GWT - 从外部 javascript 调用实例方法

转载 作者:行者123 更新时间:2023-12-04 14:02:40 28 4
gpt4 key购买 nike

我们可以在 GWT 中使用这个 $entry 方法来允许外部 javascript 执行 java 方法。
你可以在他们的文档 https://developers.google.com/web-toolkit/doc/latest/DevGuideCodingBasicsJSNI?hl=fr#calling 中看到解释

但是,该示例仅使用静态方法。我正在尝试为非静态方法编写它,当我尝试调用它时,出现异常:

java.lang.ClassCastException: Cannot cast com.google.gwt.core.client.JavaScriptObject$ to mypackage.MyModule

这是我的代码:
public native void setRefreshModuleCallback() /*-{
$wnd.refreshModule = $entry(function() {
this.@mypackage.MyModule::refreshModuleJava();
alert('test');
});
}-*/;

public void refreshModuleJava() {
logger.log(Level.WARNING, "REFRESH");
}

我觉得很有趣的是调用了alert,我在浏览器中看到了结果,但没有执行之前的调用。

你知道是否真的有可能做这样的事情吗?

最佳答案

$entry不是关于调用 java,而是关于确保 GWT 中的一些事情顺利进行:异常被路由到 GWT.UncaughtExceptionHandler ,以及通过 Scheduler#scheduleEntry 调度的命令和 Scheduler#scheduleFinally被正确调用。

您的问题是 this .当函数被调用时,this不是你的 MyModule类(它很可能是 $wnd 对象)。这就是为什么您链接的问题使用 var that = this .这是关于范围界定。

您还需要实际调用该方法,而不仅仅是引用它:在 JSNI 中,第一对括号用于形式参数(以消除重载的歧义),并且您需要另一对传递实际参数:that.@mypackage.MyModule::refreshModuleJava()() .

关于GWT - 从外部 javascript 调用实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15275087/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com