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);
}
谢谢:)
答
对于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.
})
同样的逻辑也适用于该调用异步调用服务器所有方法一样。您不应编程以从方法返回请求响应的值。
问题是? – 2013-03-24 16:12:22
您对“请求”即异步调用的理解是有缺陷的。请阅读https://developers.google.com/web-toolkit/doc/latest/tutorial/clientserver中的“进行异步调用”部分。 – SSR 2013-03-24 16:26:07
http://stackoverflow.com/questions/10014319/code-after-gwt- RPC-asynccallbak - 将 - 不被执行的/ 10021925#10021925 – 2013-03-25 02:05:29