onModuleLoad实现中的GWT RPC调用失败

onModuleLoad实现中的GWT RPC调用失败,gwt,rpc,mvp,Gwt,Rpc,Mvp,我在加载模块时获取加载数据的初始RPC调用时遇到问题 我正在改编和的代码 if fails on的错误是一个空指针,它的行为就好像根本没有进行RPC调用一样,因为在Eclipse中,RPC内部的调试消息都不会出现在测试控制台中 MenuItems对象是一个ArrayList对象,它实现了IsSerializable,并具有一个SerializableWhiteList条目,如所示。此对象在RPC RemoteServiceServlet中生成 控制台也引用该行 History.fireCurre

我在加载模块时获取加载数据的初始RPC调用时遇到问题

我正在改编和的代码

if fails on的错误是一个空指针,它的行为就好像根本没有进行RPC调用一样,因为在Eclipse中,RPC内部的调试消息都不会出现在测试控制台中

MenuItems对象是一个ArrayList>对象,它实现了IsSerializable,并具有一个SerializableWhiteList条目,如所示。此对象在RPC RemoteServiceServlet中生成

控制台也引用该行

History.fireCurrentHistoryState();
在AppController.java中(几乎与相同)

关于为什么/在哪里/如何误入歧途的想法?初始RPC调用的任何其他实现示例也很好

public class MVPtest implements EntryPoint {

    MenuItems mItems;

    public void onModuleLoad() {
        MainServiceAsync rpcService = GWT.create(MainService.class);

        System.out.println("Inside of mod load. rpcService = " + rpcService.toString());

        rpcService.getMenuItems(new AsyncCallback<MenuItems>() {

            public void onFailure(Throwable caught) {
                System.out.println("I failed...");
                caught.printStackTrace();
            }

            public void onSuccess(MenuItems result) {
                System.out.println("I got the menuitems.");
                mItems = result;
            }

        });
        HandlerManager eventBus = new HandlerManager(null);
        AppController appViewer = new AppController(rpcService, eventBus, mItems);
        appViewer.go(RootLayoutPanel.get());
    }
}

这种说法很危险:

AppController appViewer = new AppController(rpcService, eventBus, mItems);
因为客户端的代码将在不等待调用响应的情况下执行

像这样的方法应该会奏效:

public class MVPtest implements EntryPoint {

    MenuItems mItems;

    public void onModuleLoad() {
        MainServiceAsync rpcService = GWT.create(MainService.class);

        System.out.println("Inside of mod load. rpcService = " + rpcService.toString());

        rpcService.getMenuItems(new AsyncCallback<MenuItems>() {

            public void onFailure(Throwable caught) {
                System.out.println("I failed...");
                caught.printStackTrace();
            }

            public void onSuccess(MenuItems result) {
                System.out.println("I got the menuitems.");
                mItems = result;
                HandlerManager eventBus = new HandlerManager(null);
                AppController appViewer = new AppController(rpcService, eventBus, mItems);
                appViewer.go(RootLayoutPanel.get());
           }

        });
     }
}
公共类MVPtest实现入口点{
梅努特姆斯;
moduleload()上的公共void{
MainServiceAsync rpcService=GWT.create(MainService.class);
System.out.println(“mod load.rpcService=“+rpcService.toString())的内部);
rpcService.getMenuItems(新的AsyncCallback(){
失败时的公共无效(可丢弃){
System.out.println(“我失败了…”);
已捕获。printStackTrace();
}
成功时公共无效(菜单项结果){
System.out.println(“我得到了菜单”);
mItems=结果;
HandlerManager事件总线=新的HandlerManager(null);
AppController appViewer=新的AppController(rpcService、eventBus、mItems);
go(RootLayoutPanel.get());
}
});
}
}

此实现产生了java.lang.RuntimeException:无法从字节缓存读取,原因是:java.io.IOException:磁盘上没有足够的空间。另外,“模块加载内部”没有出现。清理unitCache解决了上述问题,并修复了我的RPC调用,因此现在我开始调试下一项。
public class MVPtest implements EntryPoint {

    MenuItems mItems;

    public void onModuleLoad() {
        MainServiceAsync rpcService = GWT.create(MainService.class);

        System.out.println("Inside of mod load. rpcService = " + rpcService.toString());

        rpcService.getMenuItems(new AsyncCallback<MenuItems>() {

            public void onFailure(Throwable caught) {
                System.out.println("I failed...");
                caught.printStackTrace();
            }

            public void onSuccess(MenuItems result) {
                System.out.println("I got the menuitems.");
                mItems = result;
                HandlerManager eventBus = new HandlerManager(null);
                AppController appViewer = new AppController(rpcService, eventBus, mItems);
                appViewer.go(RootLayoutPanel.get());
           }

        });
     }
}