JavaでArrayListを使用すると問題が発生します。新しいクラスオブジェクトを作成し、その値を指定し、そのオブジェクトをarrayListに追加してから、すでに使用されているオブジェクトにキーワード「new」を使用して再利用しています別のデータですが、変更されていないが以前に設定されたデータはまだ設定されていますか?
これが私のコードです
private static ArrayList<PongServerThread> games = new ArrayList<PongServerThread>();
private static int players = 0;
private static PongServerThread game;
public static void main( String args[] ) throws IOException, InterruptedException
{
while(true)
{
System.out.println("Start of Loop");
if(game.getPlayers() == 0)
{
System.out.println("Waiting for players");
}
if(game.getPlayers() == 2)
{
System.out.println("Game Added");
games.add(game);
games.get((games.size())-1).start();
game.setPlayers(0);
}
game = new PongServerThread();
}
}
このコードは正常に動作しますが、私の PongServerThread では、2 つのクライアントが接続されると main がスレッドを開始し、新しい PongServerThread オブジェクトを開始する必要があるため、さらに 2 つのクライアントがそのスレッドに接続できますが、何が起こっているかは、1 回 2スレッドが開始するクライアント、ここに新しいスレッド
game = new PongServerThread();
これは再び作成されますが、新しいクライアントが接続すると最初のクライアントを引き継ぎ、別のクライアントが接続すると 2 番目のクライアントを引き継ぎます。
game = new PongServerThread();
本当に新しい PongServerThread を作成しているわけではありません。これを修正するにはどうすればよいですか? また、2 つのクライアントが接続し、さらに 1 つ接続したときのコンソール出力もここにあります。
Start of Loop
Waiting for players
Pong
400.0:301.0:60.0:300.0:740.0:300.0
Server started
Server was setup and will try to create a socket
Client Connected with ID:0
Checking readLine value
Client Connected with ID:1
Start of Loop
Game Added
Pong
400.0:300.0:60.0:300.0:740.0:300.0
Server started
Server was setup and will try to create a socket
Checking readLine value
Client Connected with ID:0
Checking readLine value
ライアンの更新 -----
これが私のサーバーコンストラクターです
public PongServerThread() throws IOException, InterruptedException
{
//Setup
super("PongServerThread");
setupPong();
boolean listen = false;
boolean playing = false;
System.out.println(rtnInfo());
System.out.println("Server started");
//Create a serverSocket to listen on
ServerSocket serverSocket = null;
try
{
serverSocket = new ServerSocket(port);
listen = true;
System.out.println("Server was setup and will try to create a socket");
}
catch(IOException e)
{
System.err.println("Could not listen on port:" + port);
System.exit(1);
}
while(listen)
{
/*PongPlayerThread player1 = */
players[idPlayer] = new PongPlayerThread(serverSocket.accept(), idPlayer, rtnInfo());
players[idPlayer].start();
System.out.println("Client Connected with ID:" + idPlayer);
players[0].passData(rtnInfo());
idPlayer++;
if(idPlayer > 1)
{
listen = false;
playing = true;
}
}
int timer = 0;
System.out.println("Server Closed");
serverSocket.close();
}
- -アップデート - -
いくつかの変数を静的に宣言していることに気付きました。これがおそらくエラーが発生した理由ですが、サーバーコードを実行しようとすると
class Main
{
// Variable
private ArrayList<PongServerThread> games = new ArrayList<PongServerThread>();
private int players = 0;
private PongServerThread game;
public void main( String args[] ) throws IOException, InterruptedException
{
//PongServerThread game = new PongServerThread();
/*if(pt.getPlayers() == 2)
{
System.out.println("Started");
pt.start();
}*/
PongServerThread game = new PongServerThread();
while(true)
{
games.add(game);
System.out.println("Game Added");
game.start();
game = new PongServerThread();
}
/*System.out.println("Pong");
PongModel model = new PongModel();
PongView view = new PongView();
new PongController( model, view );
model.addObserver( view ); // Add observer to the model
view.setVisible(true); // Display Screen
model.makeActiveObject(); // Start play*/
}
}
このエラーが発生します
Could not get Input/Output from server
なぜ私がそれを取得するのか、誰かが知っていますか?必要に応じて、さらにコードを貼り付けることができます。