2014-10-07 2 views
0

У меня есть три класса:выход Serialize в ArrayList

Chatroom_Server.java это главный класс, который будет excecutes в первую очередь.

public class Chatroom_Server { 

    public static ChatroomHandler chatroom_handler; 
    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 

     try{ 
      final int serverPort = 9000; 
      ServerSocket ser_sock = new ServerSocket(serverPort); 
      chatroom_handler = new ChatroomHandler(); 
      chatroom_handler.fetchChatroomList(); 
      for(int i=0;i<chatroom_handler.chatroomlist.size();i++){ 
       Chatroom_base obj = (Chatroom_base)chatroom_handler.chatroomlist.get(i); 
       System.err.println(obj.chatroom_name); 
      } 

     }catch(Exception e){ 
      System.out.println(e); 
     } 
    } 

} 

Второй класс ChatroomHandler.java

public class ChatroomHandler{ 
    public static ArrayList<Chatroom_base> chatroomlist; 
    DbConnection dbcon; 
    ChatroomHandler(){ 
     //load all chatrooms from the database and add those into arrayList 
     dbcon = new DbConnection(); 
     chatroomlist = new ArrayList<Chatroom_base>(); 


    } 
    public void fetchChatroomList(){ 
     ArrayList<String> chtrmlist = dbcon.getChatroomList(); 

     for(int i = 0;i<chtrmlist.size();i++){ 
      System.out.println("Chatroom name123:"+chtrmlist.get(i)); 
      Chatroom_base obj = new Chatroom_base(); 
      synchronized(obj) { 
       obj.setChatroomname(chtrmlist.get(i)); 
       chatroomlist.add(obj); 
      } 

     } 
    } 
} 

Третий класс Chatroom_base.java:

public class Chatroom_base{ 
    public static ArrayList<Socket> chatSocketArray; 
    public static ArrayList<String> userInfo; 
    public static String chatroom_name; 
    private static final long serialVersionUID = 123456; 
    Chatroom_base(){ 
     userInfo = new ArrayList<String>(); 
     chatSocketArray = new ArrayList<Socket>(); 

    } 
    public synchronized void setChatroomname(String tname){ 
     System.out.println("Chatroom name:"+tname); 
     chatroom_name = tname; 
    } 
} 

Четвертый класс DbConnection.java, в котором я часть подключения к базе данных.
Я получаю вывод в приведенной ниже последовательности.

Chatroom name123:common 
common3 
common3 
Chatroom name:common 
common3 
Chatroom name123:common2 
Chatroom name:common2 
Chatroom name123:common3 
Chatroom name:common3 

Я предполагаю, что это проблема сериализации. Процессы получают ресурс до времени. Я хочу получить выходные данные:

Chatroom name123:common 
    Chatroom name:common 
    Chatroom name123:common2 
    Chatroom name:common2 
    Chatroom name123:common3 
    Chatroom name:common3 
    common 
    common2 
    common3 

У меня очень мало идей о java. Могу ли я получить какую-то идею или руководство для решения этой проблемы?

ответ

1

Вы должны удалить static из этих полей:

public class Chatroom_base{ 
    public static ArrayList<Socket> chatSocketArray; 
    public static ArrayList<String> userInfo; 
    public static String chatroom_name; 

Эти объектные поля, а не поля класса, поэтому они не должны быть static.