我正在开发一个必须在桌面,Android和网络浏览器上运行的应用程序。
在桌面和Android上我没有问题,一切正常。 但是在HTML版本中,类的新实例不会起作用。我不明白为什么。
这是我的代码:
public static Node newInstanceGdx(Class<? extends Node> nodeModel) throws ReflectionException {
if (nodeModel != null)
try {
return ClassReflection.newInstance(nodeModel);
} catch (Exception e) {
e.printStackTrace();
Gdx.app.setLogLevel(Application.LOG_DEBUG);
Gdx.app.log("Reflection", "Can't initialize Node class : " + (Node.class).getName());
}
return null
}
这是myGame.gwt.xml代码:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE module PUBLIC "-//Google Inc.//DTD Google Web Toolkit trunk//EN" "http://google-web-toolkit.googlecode.com/svn/trunk/distro-source/core/src/gwt-module.dtd">
<module>
<source path="fr/EU/Game" />
<extend-configuration-property name="gdx.reflect.include" value="com.me.reflected.ReflectedClass" />
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.reflect.ClassReflection"/>
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.utils.reflect.ReflectionException"/>
</module>
它总是返回&#34; null&#34;对于html版本,但在另一个版本上,一切正常。
提前感谢您的帮助。
答案 0 :(得分:1)
我发现了我的问题,希望能帮助其他人!
GWT需要知道它使用的对象的类型。
因此,当您执行ClassReflection.newInstance(o)
时,GWT必须知道“o”类型。
为此,您必须使用以下内容导入* .gwx.xml:
<extend-configuration-property name="gdx.reflect.include" value="path.ClassOfObject"/>
答案 1 :(得分:0)
gdx.reflect.include只对libGDX的内置方法有帮助,比如从jsons反序列化对象。如果你想使用它,你必须查看libGDX源他们正在使用什么样的语句。
我建议你在不是绝对必要的时候远离反思。这是一个很好的解决方案,看起来比使用实现新语句的工厂方法更好,但根据我的经验,您可能会迟早遇到ProGuard和GWT的问题。