【问题标题】:How to fix "Illegal method name <init>$" error in GWT?如何修复 GWT 中的“非法方法名称 <init>$”错误?
【发布时间】:2012-09-05 14:51:36
【问题描述】:

我遵循了http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/doc/helpInfo/jsoRestrictions.html 上的所有建议,但仍然收到臭名昭著的&lt;init&gt;$ 错误。

以下语句触发错误:

final OpenCTM ctm = OpenCTM.create();

OpenCTM 在哪里:

public final class OpenCTM extends GObject {

    protected OpenCTM() {}

    public static native OpenCTM create() /*-{
        return new $wnd.GLGE.OpenCTM();
    }-*/;

    public native void setSrc(String url, String relativeTo) /*-{
        this.setSrc(url, relativeTo);
    }-*/;

}

整个代码位于我的GitHub repository 中,并且仍然很小。我正在尝试为GLGE 框架编写一个包装库。

我真的不知道该怎么办了。

【问题讨论】:

  • 我从未听说过“臭名昭​​著的&lt;init&gt;$ 错误”,这是GWT 错误还是GLGE 错误?你能准确地发布错误是什么以及你在什么时候得到它?
  • 我听说过的最接近的看起来像这里的堆栈跟踪:code.google.com/p/gwt-remote/issues/detail?id=1,这是由于尝试在生成器时生成新的JSOs 造成的,这是不允许的。 funkybro 是对的,堆栈跟踪将有助于尝试为您提供建议,以及有关您何时获得此信息的大多数信息(例如可以在 glge-gwt 项目中确认的位置)。
  • 好的,我将很快创建一个使用 glge-gwt 的最小示例项目。然后应该更清楚错误发生在哪里。

标签: java gwt jsni


【解决方案1】:

原来这个错误是后续错误,隐藏了根本原因。

解决方案是不时地实际编译整个东西,尽管理论上在开发模式下是不必要的。这导致:

Errors in 'file:/.../MaterialLayer.java'
       Line 90: missing formal parameter
> function (in) {
> ------------^

对应的Java代码是:

public native void setMapinput(int in) /*-{
    this.setMapinput(in);
}-*/;

由于in是JS中的保留字,这可能会导致一些后续问题。长话短说,我将参数更改为 input 并让它工作......

令人沮丧!

【讨论】:

  • 哎呀,真是恶心。使用 GWT 去展示并不意味着你不需要了解 JS。
【解决方案2】:

我不是专家。我通过将扩展的 JavaScriptObject 类移到我的 EntryPoint:onModuleLoad() 实现之外来避免了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 2021-09-13
    • 2020-08-31
    • 2011-05-03
    • 2021-09-27
    • 1970-01-01
    相关资源
    最近更新 更多