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

GWT编译器错误:子类(PlayN HTML)上缺少接口方法,gwt,playn,Gwt,Playn,免责声明:我是GWT/PlayN新手,所以这可能是我犯的一个明显错误 当我有一个基本(初学者)PlayN项目时,我的BlahGame类方法实现Game接口,它需要三种方法:init、paint和update。starter类类似于: public class BlahGame implements Game { public void init() { ... } public void paint(float alpha) { ... } public void update(f

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

当我有一个基本(初学者)PlayN项目时,我的
BlahGame
类方法实现
Game
接口,它需要三种方法:
init
paint
update
。starter类类似于:

public class BlahGame implements Game { 
  public void init() { ... }
  public void paint(float alpha) { ... }
  public void update(float alpha) { ... }
}
public class BlahGameHtml extends HtmlGame
{

    @Override
    public void start()
    {
        HtmlAssetManager assets = HtmlPlatform.register().assetManager();
        assets.setPathPrefix("blah/");
        PlayN.run(new BlahGame());
    }

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

public class BaseGame implements Game { 
  public void init() { ... }
  public void paint(float alpha) { ... }
  public void update(float alpha) { ... }
}
然后,我的主要游戏类变成了
BaseGame
的子类,如下所示:

public class BlahGame extends BaseGame {
  public void init() { ... base.init(); ... }
}
一切都是从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() 
com.google.gwt.dev.jjs.InternalCompilerException:获取JNode失败
位于com.google.gwt.dev.jjs.impl.TypeMap.get(TypeMap.java:140)
位于com.google.gwt.dev.jjs.impl.TypeMap.get(TypeMap.java:71)
位于com.google.gwt.dev.jjs.impl.BuildTypeMap.getType(BuildTypeMap.java:730)
...
[错误]:公共类com.deengames.BaseGame
扩展java.lang.Object
工具:playn.core.Game
/*方法*/
公共空间()
公共void init()
[未解决]公共空隙涂料(浮法)
[未解决]公共无效更新(浮动)
[未解析]public int updateRate()
我不确定我错过了什么。是否需要更新某些GWT类?还是别的什么?我本来希望HTML vesrion能够编译,因为Java版本可以编译;类的签名不应因子类化而改变


编辑:我正在使用一个全新的样板戏项目。在类中,如果我扩展基类并实现接口,它仍然不会编译;只有删除基类扩展才有效

我认为
BlahGame.gwt.xml
文件包含有问题。确保所有目录都作为源包含在该文件中。结构应类似于:

<module rename-to='blah'>
  <inherits name='playn.PlayN' />

    <source path='core'/>
    <source path='common'/>
     ... etc ...
    <source path='html'/>

    <public path="resources" />

    <entry-point class='full.namespace.BlahGameHtml' />

</module>

这就是你的问题所在:

  [ERROR] <no source info>: public class com.deengames.BaseGame
所有游戏代码都在
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>
或:



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

我的代码如您所说。但它没有编译。即使我用@Override注释将缺少的方法添加到我的
BlahGame
类中,它也不会编译。即使实现接口和扩展基类也无法编译。在这种情况下,如果您可以发布代码,我可以快速浏览一下并尝试运行它。如果不可能,那么我只能说GWT编译器看不到基类。另外,我注意到两件事,您没有实现updateRate()方法,而且它应该是super.init()而不是base.init(),但它们可能不是您遇到的问题;这样类就位于子目录中。这将允许您在gwt.xml文件的“source”标记中包含源目录名。从您提供的错误消息中,GWT编译器无法看到java类的aource文件。GWT需要源代码才能将代码转换为javascript。希望能有帮助。好的,我今晚会把代码发出去。这是标准的样板代码,所以如果你赶时间,你可以做一个新项目,自己看看——我上传到某个地方后会发表评论。我两天后就要考试了,所以没有时间从头开始做,但如果代码已经存在,我可以快速浏览:)好的,我会继续检查上传的代码,然后。宾果。两个后续问题:1)对于我们GWT noobs来说,什么是好的GWT教程?2)如何创建新模块?(我通常将一些helper/“framework”类分离到一个单独的模块中)提供了GWT项目剖析的良好概述。您不会从标准教程中受益匪浅,因为在大多数情况下您不会直接使用GWT。创建模块很简单,只需在源代码树中创建一个您希望gwt/PlayN可用的SomeName.gwt.xml,并为gwt/PlayN使用的子包添加
项即可。如果将上述代码打包为jar供游戏使用,则需要包含.java文件(和.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>
<source path=""/>
<source path="."/>