2012-11-15 12 views
4

GWT에서 서블릿을 코딩 중이며 함수에서 전역 변수로 선언 된 데이터의 내용을 실제로 이해하지 못합니다. 동적 함수 선언에 변수를 사용하는 것과 관련된 일반적인 Java 문제 일 수도 있지만 이에 대한 답을 찾을 수 없습니다. 메소드 선언으로 변수에 액세스하기

내 코드입니다 :

private AbstractDataTable fetchDataFromServer() { 

    final DataTable data = DataTable.create(); 
    System.out.println("1 Table has " + data.getNumberOfColumns() + " columns"); 
    System.out.println("1 Table has " + data.getNumberOfRows() + " rows"); 

    try { 

     RequestBuilder rb = new RequestBuilder(RequestBuilder.GET, "/mongo.json"); 

     rb.setCallback(new RequestCallback() { 
      @Override 
      public void onResponseReceived(Request request, Response response) { 
       JSONValue value = JSONParser.parse(response.getText()); 
       JSONObject productsObj = value.isObject();   
       JSONArray radiation = productsObj.get("ShortWave_Rad").isArray(); 

       if (radiation != null) { 

        data.addColumn(ColumnType.NUMBER, "Horizon"); 
        data.addColumn(ColumnType.NUMBER, "Value"); 

        System.out.println("Values " + radiation.size()); 

        for (int i=0; i<=radiation.size()-1; i++) { 

         JSONObject productObj = radiation.get(i).isObject(); 
         data.addRows(radiation.size()); 
         data.setValue(i, 0, productObj.get("horizon").isNumber().doubleValue()); 
         data.setValue(i, 1, productObj.get("value").isNumber().doubleValue());  
        } 

        System.out.println("2 Table has " + data.getNumberOfColumns() + " columns"); 
        System.out.println("2 Table has " + data.getNumberOfRows() + " rows");  

       } 
      } 
      @Override 
      public void onError(Request request, Throwable exception) { 
       Window.alert("Error occurred" + exception.getMessage()); 
      } 
     }); 
     rb.send(); 

    } 
    catch (RequestException e) { 
     Window.alert("Error occurred" + e.getMessage()); 
    } 

    System.out.println("3 Table has " + data.getNumberOfColumns() + " columns"); 
    System.out.println("3 Table has " + data.getNumberOfRows() + " rows"); 

    return data; 
} 

그리고 이것은 내가 얻을 출력 :

1 표가 0 colums

1 표가

2 표 2를 가지고 0 행

칼럼

2 표 10 행

3 표 0 colums

있다

3 표가 0 행 onResponseReceived 선언이 그것을 사용 후 데이터의 내용이 갔다 않았다

?

많은 도움에 감사드립니다.

+0

예상되는 출력은 무엇이며, 얻은 결과와 어떻게 다릅니 까? –

답변

2

onResponseReceived비동기 호출 응답 후에 호출됩니다. 아래 문은 응답을 받기 전에 실행될 가능성이 큽니다.

System.out.println("3Table has colums " + data.getNumberOfColumns()); 
System.out.println("3Table has rows " + data.getNumberOfRows()); 

끝에 크기를 인쇄하기 전에 몇 가지 상태 플래그를 사용하여 콜백 상태를 확인하십시오.

+1

"가능성이 있지만"** ** 확실히 : GWT는 JavaScript와 호환되며 JavaScript는 UI 스레드에서 실행되기 때문에 "3 Table has"행 전에 콜백을 호출 할 방법이 없습니다. UI 스레드는 여전히 있습니다. 통화량과 콜백 - 응답이 이미있는 경우에도 코드 산출량 이후로 지연됩니다. –

관련 문제