この質問を数回見たことがありますが、正直なところ、それを機能させる方法がわかりません。クライアントとサーバーのアプリケーションがあり、サーバーには ObjectOutputStream 変数があり、2 倍の整数配列を含む配列リストを送信します (これは、オブジェクトを送信する必要があるためであり、通常の配列は使用できないためです)。オブジェクトの場合、送信できるように配列リストにラップします)。クライアントは ObjectInputStream 変数を使用してそれを受け取りますが、double 配列がその数値を変更したとしても、配列リスト オブジェクトの最初のインスタンスしか受け取りません。送信するオブジェクトを更新するにはどうすればよいですか? ObjectInputStream が毎回新しいオブジェクトを受け取るようにするにはどうすればよいですか?
-ダン
サーバ:
public class Send extends Thread{
Starter start;
PlayerArray array;
Names name;
public Send(Starter start, PlayerArray array, Names name){
this.start = start;
this.array = array;
this.name = name;
}
public void run(){
while(start.running){
for(int i = 0; i < start.roomNum; i++){
if(start.send[i] != null && start.OOS[i] != null){
try{
array.setSendingArray(i);
start.OOS[i].writeObject(array.get());
start.OOS[i].flush();
}catch(Exception e){
}
}
}
}
}
}
サーバー プレーヤー配列クラス: (クライアントと同じ):
public class PlayerArray{
Starter start;
int[][] players;
int[][] sending;
public PlayerArray(Starter start){
this.start = start;
players = new int[start.roomNum][2];
defaultArray();
}
public int[][] getArray(){
return players;
}
public ArrayList<int[][]> get(){
ArrayList<int[][]> xyWrap = new ArrayList<int[][]>();
xyWrap.add(sending);
return xyWrap;
}
public void set(int[][] xy){
players = xy;
}
public void set(int index, int newX, int newY){
players[index][0] = newX;
players[index][1] = newY;
}
public void setSendingArray(int i){
//take out "i"'s x and y.
sending = players;
//sending[i][0] = -1;
//sending[i][1] = -1;
}
public void defaultArray(){
for(int i = 0; i < start.roomNum; i++){
players[i][0] = -1;
players[i][1] = -1;
}
sending = players;
}
クライアント:
public class Recieve extends Thread{
Starter start;
PlayerArray array;
Names name;
public Recieve(Starter start, PlayerArray array, Names name){
this.start = start;
this.array = array;
this.name = name;
}
public void run(){
while(start.running){
try{
ArrayList<int[][]> xy = new ArrayList<int[][]>();
xy = (ArrayList<int[][]>)start.OIS.readObject();
array.set(xy.get(0));
int[][] testXY = array.getArray();
System.out.println("X: " + testXY[0][0] + " Y: " + testXY[0][1]);
}catch(Exception e){
System.err.println("CANNOT READ OBJECT!");
}
}
}
}