我有三个班:
Chatroom_Server.java,这是主要的类,它将首先超越。
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,我几乎没有什么想法。我能得到一些解决这个问题的想法或方向吗?
发布于 2014-10-07 02:16:22
您应该从以下字段中删除static:
public class Chatroom_base{
public static ArrayList<Socket> chatSocketArray;
public static ArrayList<String> userInfo;
public static String chatroom_name;这些是对象字段,而不是类字段,因此它们不应该是static。
https://stackoverflow.com/questions/26227509
复制相似问题