GWT编译器错误:子类(PlayN HTML)上缺少接口方法
免责声明:我是GWT/PlayN新手,所以这可能是我犯的一个明显错误 当我有一个基本(初学者)PlayN项目时,我的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
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="."/>