GWT编译器错误:子类上缺少接口方法(PlayN HTML)

ash*_*999 6 gwt playn

免责声明:我是GWT/PlayN的新手,所以这可能是我正在犯的一个明显的错误.

当我有一个基本的(首发)PlayN项目,我的BlahGame类方法实现了Game接口,这需要三个方法:init,paint,和update.入门类看起来像:

public class BlahGame implements Game { 
  public void init() { ... }
  public void paint(float alpha) { ... }
  public void update(float alpha) { ... }
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个BaseGame实现游戏的类,如下所示:

public class BaseGame implements Game { 
  public void init() { ... }
  public void paint(float alpha) { ... }
  public void update(float alpha) { ... }
}
Run Code Online (Sandbox Code Playgroud)

我的主要游戏类然后变成了这样的子BaseGame类:

public class BlahGame extends BaseGame {
  public void init() { ... base.init(); ... }
}
Run Code Online (Sandbox Code Playgroud)

所有东西都是用Java编译和工作的.但是当我尝试GWT编译我的游戏的HTML版本时,我收到此错误:

com.google.gwt.dev.jjs.InternalCompilerException: Failed to get JNode
    at com.google.gwt.dev.jjs.impl.TypeMap.get(TypeMap.java:140)
    at com.google.gwt.dev.jjs.impl.TypeMap.get(TypeMap.java:71)
    at com.google.gwt.dev.jjs.impl.BuildTypeMap.getType(BuildTypeMap.java:730)

...


      [ERROR] <no source info>: public class com.deengames.BaseGame
    extends java.lang.Object
    implements : playn.core.Game
/*   methods   */
public void <init>() 
public void init() 
[unresolved] public void paint(float) 
[unresolved] public void update(float) 
[unresolved] public int updateRate() 
Run Code Online (Sandbox Code Playgroud)

我不确定我在这里缺少什么.是否需要更新一些GWT类?或者是别的什么?自从Java版本编译以来,我原本期望编译HTML vesrion; 类的签名不应该从子类更改.

编辑:我正在使用一个全新的样板PlayN项目.在类中,如果我扩展基类并实现接口,它仍然不能编译; 只删除基类扩展工作.

sam*_*ert 7

这是你的问题:

  [ERROR] <no source info>: public class com.deengames.BaseGame
Run Code Online (Sandbox Code Playgroud)

您已将代码放在顶级包中com.deengames.我打赌你的GWT模块文件也在同一个包目录中,可能就像com/deengames/MyGame.gwt.xml.GWT模块文件必须为GWT将看到的所有代码指定子包目录.

使用PlayN Maven原型生成项目时,它具有以下结构:

core/src/main/java/com/foozle/core/Barzle.java
core/src/main/java/com/foozle/resources/images/bg.png
html/src/main/java/com/foozle/Barzle.gwt.xml
html/src/main/java/com/foozle/html/BarzleHtml.java
Run Code Online (Sandbox Code Playgroud)

所有游戏代码都在com.foozle.core包中,资源在com.foozle.resources包中.如果查看生成的Barzle.gwt.xml文件,您将看到:

<module rename-to='barzle'>
  <inherits name='playn.PlayN'/>
  <source path='core'/>
  <source path='html'/>
  <public path="resources" />
  <entry-point class='com.foozle.html.BarzleHtml'/>
</module>
Run Code Online (Sandbox Code Playgroud)

这两<source>行显式地将子包com.foozle.corecom.foozle.html子包添加到GWT项目中.GWT将忽略此GWT模块文件中未明确列出的任何内容.由于GWT指定这些包的方式,无法将顶级包添加到GWT项目中.你不能使用:

<source path=""/>
Run Code Online (Sandbox Code Playgroud)

要么:

<source path="."/>
Run Code Online (Sandbox Code Playgroud)

您必须将所有代码放在GWT模块文件中显式枚举的子包中.