Java 为什么私有内部类中的变量可以';是否从Gwt中的AsyncCallback方法获取具有值的私有变量的值?
我在Gwt中发现了这种非常奇怪的行为 我有一个简单的TestPresenter.java,它有两个按钮。按钮1从数据库获取数据,并通过Asyncallback方法返回值。按钮2用于从私有内部类检索该值Java 为什么私有内部类中的变量可以';是否从Gwt中的AsyncCallback方法获取具有值的私有变量的值?,java,gwt,gwtp,Java,Gwt,Gwtp,我在Gwt中发现了这种非常奇怪的行为 我有一个简单的TestPresenter.java,它有两个按钮。按钮1从数据库获取数据,并通过Asyncallback方法返回值。按钮2用于从私有内部类检索该值 private String test1; private String test2; private AsyncCallback<GetArticleResult> getArticleCallback=new AsyncCallback<GetArticleResult>
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);
}
}
私有字符串test1;
私有字符串test2;
private AsyncCallback getArticleCallback=新建AsyncCallback(){
@凌驾
失败时的公共无效(可丢弃){
//TODO自动生成的方法存根
加载Presenter.hide();
}
@凌驾
成功时公共无效(GetArticleResult){
test1=result.getVal();
test2=“123”;
}
};
LineHtmlContextMenuHandler中的私有类实现ContextMenuHandler{
@凌驾
公共无效onContextMenu(ContextMenuEvent事件){
System.out.println(test1);
System.out.println(test2);
}
}
现在,我首先单击按钮1&它从DB获取数据,然后单击按钮2。然后我得到输出:test1=Null;test2=“123”调试test1
时,code>显示实际值,而不是null
。对于test1
变量,如果我正常地从一个方法访问它,那么它就可以了,但是如果从私有内部类访问它,那么我就不能得到它的值
怎么了?这太奇怪了?我用GWT2.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);
}
}
您使用的是什么版本的GWT?如果不是最新版本,请尝试升级。为我解决了过去的一些问题。另外,您确定result.getVal()在未调试时不为null吗?在onSuccess中添加一个println以确保成功。我正在使用GwtP 2.4或2.5。我确信,它会返回一个值。您可以包含问题的完整来源吗?谢谢,我现在知道了,因为我的编码错误,我在同一个方法上多次调用ansyn,因此第二次调用覆盖了该值,然后您可以取消挂起的请求(com.google.gwt.http.client.Request.cancel),所以完成后不会调用onSuccess。
public class GetArticleResult implements IsSerializable {
public String msg;
}