2012-03-19 11 views
0
public Class GUi(){ 
// More Code 

public void onClick(ClickEvent event) { 

LoginServer loginServer =new LoginServer(getTextBoxUsername().getText(),getTextBoxPassword().getText());  
loginServer.setConnection(connection); 
connection=loginServer.getConnection(); 
System.out.println(" connected "+connection); 
// More code 
} 

public class LoginServer { 
// more code 
public void setConnection(Boolean connection) { 

    String[] authentication = {username,password}; 
    //RPC call 
    connectionService.connectionServer(authentication, callbackConnection); 
    System.out.println("setConnection" + connection); 
} 

public Boolean getConnection() { 
    return connection; 
} 
AsyncCallback callbackConnection = new AsyncCallback() { 

    public void onFailure(Throwable caught) { 
     // TODO Auto-generated method stub 
     connection=false; 
    } 

    public void onSuccess(Object result) { 
     connection=true; 
     System.out.println("onSuccess + connection); 

    } 
}; 

} 

出力GWTでのRPC呼び出し後のフロー?

setConnectionnull 
connected null 
onSuccesstrue 

ミーによると、出力は次のようになります。

onSuccesstrue 
setConnectiontrue 
connected null 

は、私はその後、私は完全に正常に動作して書かれたRPC呼び出しがあるメソッドを呼び出す setConnection LoginServer ;のオブジェクトを作ったので。 OnSuccesは、接続の値を変更します。 次に、メソッド getConnectionを呼び出しました。

私はまた、あなたがあなたにビールを持ってあなたの妻/ガールフレンドを求めるならconnected null

答えて

3

は、あなたが彼女に尋ね秒後にあなたの手でそのビールを持っていない場合は/理由を理解し、あなたはありません試合を見続けて反応することができます。あなたはビールを待つことをブロックされません。それは非同期処理と呼ばれます。

同様に、connectionはあなたのRPCコールを送信した後、第2のnullまだです。

は、コールバック関数が非同期で実行されるためですhttps://groups.google.com/d/msg/Google-Web-Toolkit/-soVdfMGug8/vRmqIcAZ5zsJ

+0

:)素敵な説明。上記のリンクは良いリンクではありません。私はページが開かないことを意味する。 は、あなたは私のasyncCallが完了するのを待ってから、reminingコードを実行するために使用することができますwhicいくつかの方法を提案することができます。 – NewCodeLearner

+0

私はあなたのことを完全に理解しています。それにはどんな解決策もあります。 私はasyncInterfaceの実行が完了する前に、私の他の方法を停止したいです。 他のコードはすべて、asyncのsuccesに依存します。たとえばLoginGuiは非同期呼び出しがあるログインクラスを呼び出します。イベントの成功の次のページはLoaded.IはOnsuccessメソッド内の別のnextPageのオブジェクトを作成できません。私はGUIと論理部分をseprateしたいので。 – NewCodeLearner

+0

が呼ばれるように、あなたの 'setConnection'メソッドにコールバック引数を追加し' onSuccess'(または、より簡単に、あなたのRPCに直接渡すことを、あなたの方法に 'AsyncCallback'を渡す、または単にあなたの' LoginServer'を削除し、使用して ' connectionService'を直接呼び出します)。 –

1
setConnectionnull 

参照してください。つまり、この関数は、応答がサーバーからブラウザーに送られた後に呼び出されます。しかし

connection=loginServer.getConnection(); 

のようなコードの他の部分は、時間の接続がNULLであることにより、すぐに実行されています。

ありがとう、 Ganesh

+0

こんにちはNewCodeLearnerは、するonSuccessにNEXTPAGEのオブジェクトを作ります。つまり、以前は初期化しないでください。 –

+0

雅しかし 'のsetVisible(偽)であることが必要somePanelsあり;' 'このようなIF(Boolean.TRUE.equals(接続)){loginPanel.getParent()は、のgetParent()のgetParent().setVisible(偽)。 ; NexPage nexpage = new Nexpage(); ' – NewCodeLearner

関連する問題