2013-08-05 52 views
1

我编译用户界面时出现问题,当我添加一个方法messages.usuario()时,Firebug显示错误:TypeError:null没有属性 lblUsuario = new Label_2(null.nullMethod ());这是我的类的代码:GWT null没有属性

public class AdministradorMVP implements EntryPoint { 


private MessageConstants messages; 

@Inject 
public void setMensajes(MessageConstants mensajes) { 
    this.messages = mensajes; 
} 


private final MyWidgetGinjector injector = GWT.create(MyWidgetGinjector.class); 



private Place defaultPlace = new SignInPlace("Admin"); 
private SimplePanel appWidget = new SimplePanel(); 

/** 
* This is the entry point method. 
*/ 



Label lblUsuario = new Label(messages.usuario()); 
Label lblNombre = new Label(messages.nombre()); 

让我无法找到问题的出处,谢谢

+0

问题是你的依赖注入的地方(我假设你使用杜松子酒/ guice或类似的东西)。请添加注射的设置代码。 – Vjeetje

+0

我是J2EE新人,所以请原谅^^ ...所以安装程序是在pom.xml中的配置? –

回答

1

从你的代码中我错过了“推动注射”(参见JavaDoc of Ginjector)。换句话说,您需要触发初始注射。创建MyWidgetGinjector是不够的。

一种解决方案是一种方法,在void inject(AdministradorMVP entryPoint);呼叫onModuleLoad添加到接口MyWidgetGinjector和在类AdministradorMVP为(其中之一)的第一语句:injector.inject(this);

+0

你是最好的,非常感谢你的兄弟,你的方法完美的作品 –

2

GWT编译器生成null.nullMethod()时,它可以静态地确定一个特定的方法总是被调用在null参考。在这种情况下,messages已确定始终null(无论是setMensajes是带一个null值,或者它不是在所有的称呼),所以messages.usuario()总会抛出一个NullPointerException,这是翻译成生成的JavaScript代码null.nullMethod()

+0

是的,这正是问题所在,但在我们的例子中,usuario()是在类MessageConstants中用tho代码公开的 和MessageConstants_ca.properties我们有: usuario = Usuari 那么为什么这个返回null? &谢谢你的回复:) –

+0

查看Hilbrand的答案:因此,'setMensajes'永远不会被调用,所以'this.messages'永远不会被分配,并且总是'null',因此'messages.usuario() '总是会抛出'NullPointerException'。 –

+0

是的,非常感谢:) –