Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么私有内部类中的变量可以';是否从Gwt中的AsyncCallback方法获取具有值的私有变量的值?_Java_Gwt_Gwtp - Fatal编程技术网

Java 为什么私有内部类中的变量可以';是否从Gwt中的AsyncCallback方法获取具有值的私有变量的值?

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>

我在Gwt中发现了这种非常奇怪的行为

我有一个简单的TestPresenter.java,它有两个按钮。按钮1从数据库获取数据,并通过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);
        }
}
私有字符串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;
}