我在Gwt中发现了这种奇怪的行为。
我有一个简单的TestPresenter.java,它有2个按钮。按钮1从DB获取数据并通过Asyncallback方法返回值。按钮2是从私有内部类中检索该值。
private String test1;
private String test2;
private AsyncCallback<GetArticleResult> getArticleCallback=new AsyncCallback<GetArticleResult>(){
@Override
public void onFailure(Throwable caught) {
// TODO Auto-generated method stub
loadingPresenter.hide();
}
@Override
public void onSuccess(GetArticleResult result) {
test1=result.getVal();
test2="123";
}
};
private class InlineHTMLContextMenuHandler implements ContextMenuHandler {
@Override
public void onContextMenu(ContextMenuEvent event) {
System.out.println(test1);
System.out.println(test2);
}
}
现在,我先点击按钮1&amp;它从数据库中获取数据,然后单击按钮2.然后在调试test1=Null; test2="123";
显示实际值时,我得到输出:test1
,而不是null
。对于test1
变量,如果我通常从方法访问它,那么它会没问题,但如果从私有内部类访问它,那么我就无法得到它的值。
有什么不对?这太奇怪了?
答案 0 :(得分:1)
我使用GWT 2.5.1进行了测试,问题没有发生。很可能你的问题出在GetArticleResult类中。
以下是我使用的代码:
private String test1 = null;
private String test2 = null;
private AsyncCallback<GetArticleResult> callback = new AsyncCallback<GetArticleResult>() {
@Override
public void onFailure(Throwable throwable) {
Window.alert(throwable.getClass().getName() + " - " + throwable.getMessage());
}
@Override
public void onSuccess(GetArticleResult s) {
test1 = s.msg;
test2 = "123";
Window.alert(test1 + " - " + test2);
}
};
private class MyValueChangeHandler implements ValueChangeHandler<String> {
@Override
public void onValueChange(ValueChangeEvent<String> stringValueChangeEvent) {
Window.alert(test1 + " - " + test2);
}
}
我的GetArticleResult非常简单:
public class GetArticleResult implements IsSerializable {
public String msg;
}