0
我的程序在執行過程中遇到錯誤,因爲NewServer中的arrlist元素沒有被複制到MyConnection。我該怎麼辦?如何將數組列表的元素從另一個類複製到另一個類
MyConnection負責發送和獲取消息以及將消息分發給所有客戶端。
public class MyConnection extends Thread{
Socket s;
BufferedReader in;
PrintWriter out;
String reps, msg;
ArrayList<MyConnection> arrlist;
MyConnection(Socket s, ArrayList<MyConnection> arrlist){
this.arrlist = arrlist;
this.s = s;
try{
this.in= new BufferedReader(new InputStreamReader(s.getInputStream()));
this.out= new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
}catch(IOException e){
System.out.println("Something Bad Happened " + e);
}
}
boolean sendMessage(String msg){
try{
NewServer server = new NewServer();
server.sendtoAll(msg);
out.println(msg);
out.flush();
System.out.println(server.arrlist.size());
return true;
}catch (Exception e) {
System.out.println("S: Something bad happened :(");
e.printStackTrace();
return false;
}
}
String getMessage(){
try{
reps = in.readLine();
}catch (Exception e) {
System.out.println("S: Something bad happened :(");
e.printStackTrace();
}
return reps;
}
}
這裏的NEWSERVER
public class NewServer{
static ArrayList<MyConnection> arrlist = new ArrayList<MyConnection>();
static boolean push;
static Socket s;
public void sendtoAll(String message){
for(int i= arrlist.size(); i >= 0; i--){
MyConnection t3 = arrlist.get(i);
t3.sendMessage(message);
if(!t3.sendMessage(message)){
arrlist.remove(i);
System.out.println("Client disconnected");
}
}
}
public static void main(String args[]){
try{
System.out.println("S: Starting server...");
ServerSocket ssocket = new ServerSocket(8888);
System.out.println("S: Waiting for connections...");
while(true){
s = ssocket.accept();
System.out.println("SOMEONE CONNECTEDDDDD" + arrlist.size());
MyConnection t = new MyConnection(s,arrlist);
arrlist.add(t); //put my connection to arrlist
t.start();
}
}catch(Exception e) {
System.out.println("Soooomething Bad Happened " + e);
}
}
也許我失去了一些東西 - 但我無法找到你的代碼中的任何地方,你實際上把對象放入你的數組列表中。只要創建一個空的數組列表就不會神奇地將對象放入其中。 **附註**:在'sendtoAll'中迭代你的arrlist的方式是不好的做法。只需使用for(MyConnection con:arrlist){' 這種「downcouting」方法給讀者增加了很多潛在的困惑;在性能上獲得(非常小的)收益。根本不要這樣做。 – GhostCat 2015-04-02 07:35:38
MyConnection t = new MyConnection(s,arrlist); arrlist.add(t); – user3339866 2015-04-02 07:37:17
你調試了你的代碼嗎?嘗試使用調試器。 – Touchstone 2015-04-02 07:45:53