如何修复GWT中的“非法方法名<init> $”错误?</init>

时间:2012-09-05 14:51:37

标签: java gwt jsni

我遵循了http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/doc/helpInfo/jsoRestrictions.html上的所有建议,仍然得到了臭名昭着的<init>$错误。

以下语句触发错误:

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框架编写一个包装器库。

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

2 个答案:

答案 0 :(得分:0)

事实证明,该错误是后续错误,并隐藏了根本原因。

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

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并使其正常工作......

令人沮丧!

答案 1 :(得分:0)

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