これはクライアント サーバー プログラムです。各クライアントサーバーには、このクライアントへのメッセージがあるかどうかを確認するメソッドがあります。
コード:
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」がnullではなく、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();
}
}
ありがとう。