为什么私有内部类中的变量无法获取具有Gwt中AsynC回调方法值的私有变量的值?

时间:2013-12-16 13:14:39

标签: java gwt gwtp

我在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变量,如果我通常从方法访问它,那么它会没问题,但如果从私有内部类访问它,那么我就无法得到它的值。

有什么不对?这太奇怪了?

1 个答案:

答案 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;
}