GWT突然停止执行

问题描述:

我有一个与GWT不同寻常的问题。在编译项目之后,在浏览器中运行.html文件来运行它。它运行良好,直到下面的代码行显示:GWT突然停止执行

public static ClickHandler addBoardButtonHandler(final String name) { 
    return new ClickHandler(){ 

     @Override 
     public void onClick(ClickEvent event) { 
      Window.alert("We will retrieve them!"); //this line runs 
      String boardSTickets = getBoardSTickets(name); // this too 
      Window.alert("We got tickets!"); // the code is never executing this line 
      String boardSSwimlanes = getBoardSSwimlanes(name); 
      Window.alert("We got swimlanes!"); 
      KanbanizerClient.showSingleBoard(boardSTickets, boardSSwimlanes); 
     } 

    }; 
} 

此方法由该另一种方法叫:

private static Button addBoardButton(String name) { 
    Button button = new Button(name); 
    button.addClickHandler(HandlerManager.addBoardButtonHandler(name)); 
    return button; 
} 

这也正常运行。这里是getBoardSTickets()方法:

protected static String getBoardSTickets(String name) { 
    final List<String> ticketsJSON = new LinkedList<String>(); 
    try { 
      Request request = Builder.createBuilder(RequestBuilder.GET, "http://localhost:8080/Kanbanizer/boards/" + name + "/tickets").sendRequest(null, new RequestCallback(){ 

       @Override 
       public void onResponseReceived(Request request, 
         Response response) { 
        if(response.getStatusCode() == 200){ 
         ticketsJSON.add(response.getText()); 
        } 

       } 

       @Override 
       public void onError(Request request, Throwable exception) { 
        // TODO Auto-generated method stub 

       } 

      }); 
     } catch (RequestException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    return ticketsJSON.get(0); 
} 

谢谢:)

+0

问题是? – 2013-03-24 16:12:22

+0

您对“请求”即异步调用的理解是有缺陷的。请阅读https://developers.google.com/web-toolkit/doc/latest/tutorial/clientserver中的“进行异步调用”部分。 – SSR 2013-03-24 16:26:07

+0

http://stackoverflow.com/questions/10014319/code-after-gwt- RPC-asynccallbak - 将 - 不被执行的/ 10021925#10021925 – 2013-03-25 02:05:29

对于GWT背景下理解AJAX - 请通过 “进行异步调用” 一节中https://developers.google.com/web-toolkit/doc/latest/tutorial/clientserver

你的编程阅读getBoardSTickets()作为执行异步请求调用后返回字符串的方法存在缺陷。不要试图在getBoardStickets()中返回异步调用的结果。

return ticketsJSON.get(0);sendRequest()后立即被调用。由于RequestCallback()不会完成处理,它会抛出一个异常,因为ticketsJSON将具有零个条目。

尝试通过回调从外部

protected static String getBoardSTickets(String name, RequestCallback callback){ 
     //Code for making request 
} 

你调用代码应更改为

getBoardSTickets(name, new RequestCallback(){ 
    //onSuccess and onFailure handling. 
}) 

同样的逻辑也适用于该调用异步调用服务器所有方法一样。您不应编程以从方法返回请求响应的值。