2017-05-22 1 views
2

Ich rief 'neue NewForm (res) .show()' in PostResponse, aber obwohl die Verbindung erfolgreich ist, wird die bestimmte Form nicht gesehen. Ich habe herausgefunden, dass es gut funktioniert, wenn ich 'cr.setDisposeOnCompletion (d)' auskommentiere. Aber unendlich Fortschritt läuft unendlich, wenn irgendeine Ausnahme auftritt und so weiter. Ist das ein Fehler? Es trat auf, nachdem ich auf neues cn1 Bibliotheksupdate aktualisiert habe. Wenn Sie das Projekt, um zu sehen, sein hier: https://drive.google.com/file/d/0B8ATnICIY2S8LUdta0F5NXYzamM/view?usp=sharingConnectionRequest Problem

Button checkButton = new Button("Check"); 
checkButton.addActionListener(e -> { 
    ConnectionCheck cc = new ConnectionCheck(theme); 
    cc.connectionCheckMethod(); 
}); 

ConnectionCheck Klasse

public class ConnectionCheck { 

Resources res; 
Dialog d; 

public ConnectionCheck(Resources res) { 
    this.res = res; 
} 

public void connectionCheckMethod() { 
    ConnectionRequest cr = new ConnectionRequest() { 

     @Override 
     protected void readResponse(InputStream input) throws IOException { 
      JSONParser jsonp = new JSONParser(); 
      Map<String, Object> parser = jsonp.parseJSON(new InputStreamReader(input)); 
      System.out.println("bibek " + parser); 
     } 

     @Override 
     protected void postResponse() { 
       new NewForm(res).show(); 
     //  d.dispose(); 
     } 

     @Override 
     protected void handleErrorResponseCode(int code, String message) { 
      System.out.println("login ErrorResponseCode " + code + "msg: " + message); 
     // d.dispose(); 
     } 

     @Override 
     protected void handleException(Exception err) { 
      System.out.println("login Exception " + err); 
     // d.dispose(); 
     } 

     @Override 
     protected void handleIOException(IOException err) { 
      System.out.println("login IOException " + err); 
     // d.dispose(); 
     } 

     @Override 
     protected void handleRuntimeException(RuntimeException err) { 
      System.out.println("login RuntimeException " + err); 
     // d.dispose(); 
     } 
    }; 
    cr.setPost(true); 
    cr.setUrl("http://api.geonames.org/citiesJSON?north=44.1&south=-9.9&east=-22.4&west=55.2&lang=de&username=demo"); 
    cr.setTimeout(30000); 
    cr.addRequestHeader("Accept", "application/json"); 
    InfiniteProgress ip = new InfiniteProgress(); 
    d = ip.showInifiniteBlocking(); 
    cr.setDisposeOnCompletion(d); //if this line is commented, the newForm is shown 
    NetworkManager.getInstance().addToQueueAndWait(cr); 
    } 
} 

NewForm Klasse

public class NewForm extends Form{ 

    public NewForm(Resources res){ 
     setTitle("new Form"); 
     add(new Label("new Form")); 
    } 
} 

Antwort

1

Sie müssen den Dialog entsorgen, bevor die Show von dem anruf neue Form. Nach Abschluss des Vorgangs entsorgen Sie den Dialog, wenn die Verbindung hergestellt wurde, was manchmal unvorhersehbar ist.

Wenn ein Dialog entsorgt wird, kehrt er zum vorherigen Formular zurück, d. H. Zu dem, das vor der Anzeige des Dialogs angezeigt wurde.

+0

Ich habe neue Form in PostResponse-Methode aufgerufen. PostResponse() sollte aufgerufen werden, nachdem connectionRequest erfolgreich ist (dh, dispose on completion wird vor dem neuen Formular in postResponse aufgerufen), oder? Der obige Code wurde früher verwendet. Was sollte ich jetzt ändern? Muss ich das Dialogfeld manuell in der Post-Response-Methode und in jeder Ausnahme behandeln? –

+0

Ja, entsorgen Sie es manuell –