这是一个客户端-服务器程序。对于每个客户端,服务器都有一个方法,该方法检查是否有一些消息发送到该客户端。
代码:
while (bool) {
for(int j = 0;j<Start.bases.size();j++){
if(Start.bases.get(j).getId() == id){
if(!Start.bases.get(j).ifEmpty()){
String output = Start.bases.get(j).getMessage();
os.println(output);
System.out.println(output +" *FOT* "+ addr.getHostName());
}
}
}
每个线程都有一个 id。所以一切似乎都很好,但我在这一行得到了奇怪的空指针异常
if(Start.bases.get(j).getId() == id){
id - 整数。这真的很奇怪,因为我已经在调试这部分运行并检查了“bases”和“id”不为空,并且 bases 有适当的字段。基地不为空。
顺便说一句,bases 是静态的(因为每个线程都可以使用它),并且在使用此方法之前声明了 bases。
这条线不会引起问题
for(int j = 0;j<Start.bases.size();j++){
可能是因为方法 getId() 吗?
public int getId(){
return id;
}
问题是什么?
已编辑。
static ArrayList<Base> bases;
bases = new ArrayList<Base>();
类基:
public class Base {
private ServerThread st;
private int id;
private String name;
private ArrayList<String> messages;
public Base(String n, ServerThread s_t, int i_d){
messages = new ArrayList<String>();
st = s_t;
name = n;
id = i_d;
}
public String getName(){
return name;
}
public int getId(){
return id;
}
public ServerThread getThr(){
return st;
}
public String getMessage(){
String ret = "";
if(!messages.isEmpty()){
ret = messages.get(0);
messages.remove(messages.get(0));
}
return ret;
}
public void addMessage(String m){
messages.add(m);
}
public boolean ifEmpty(){
return messages.isEmpty();
}
}
谢谢。