2016-06-16 9 views
0

Javaでオブジェクトを保存して値を変更することは可能ですか?オブジェクトを格納して使用する

私はrmi server-clientに取り組んでいます。クライアントを私のサーバーのArrayListに保存したいと思います。私はクライアントの値をサーバーから直接変更しようとするまでは良さそうでした。私はC + +を使用していた場合、私はポインタを宣言します。

私はlook_up.LogIn(this);

Serverのコードと私のメソッドを呼び出す:

@Override 
public void LogIn(Client temp) throws RemoteException { 
    for (Client arr : users) { 
     if (arr.equals(temp)) { 
      temp.setID(0); 
     } 
    } 
    // users.add(temp); 
    Random rand = new Random(); 

    int randomNum = rand.nextInt((100 - 1) + 1) + 1; 
    boolean flag = false; 

    do { 
     for (Client arr : users) { 
      if (arr.getId() == randomNum) { 
       flag = true; 
      } 
     } 
    } while (flag); 
    temp.setID(randomNum); 
    System.out.println("Id we .. : " + temp.getId()); 
    users.add(temp); 

} 

クライアントコード:私は私のLogInとして定義した場合にのみ、コードの作業の

if (e.getSource() == logIn) { 
    try { 
     look_up.LogIn(this); 
     if (this.id != 0) {      
      JOptionPane.showMessageDialog(frame, "Loged in Succesfully"); 
      logIn.setEnabled(false); 
      submit.setEnabled(true); 
      information.setText(look_up.check_Files()); 
      tempValue = this.id; 
      System.out.println("Temp value afer login : " + tempValue); 
     } else { 
      JOptionPane.showMessageDialog(frame, "Sorry but somthing went wrong try to log in again..."); 
     } 
    } catch (RemoteException ex) { 
     System.err.println("Object cant be send"); 
     ex.printStackTrace(); 
    } 
} 

これらの行int乱数値。直接変更しようとしたときにエラーが発生しました。

私はtemp.setIdを設定してもうまくいきましたが、クライアントでは実際のインスタンスIDは0のままでした。これはどのように可能ですか?

答えて

0

私はdo-wholeループから何かを理解できませんが、クライアントにその値を魔法のように変更するためにサーバーに渡されるパラメータを期待しているようです。これは起こっていることの完全な誤解を裏付けるものです。 Clientは明らかにSerializableなので、値はサーバーに渡されます。サーバ上でそのオブジェクトに対して行われた変更はではなく、はクリエイティブに反映されます。結果が必要な場合は、リモートメソッドから結果値として返す必要があります。

関連する問題