我已創建在當服務器正在運行,新的客戶端連接,新用戶應該被添加到「投標人」階層和他們的名字應該輸出一個簡單的服務器和客戶端應用程序數組列表get函數時,在這種情況下,我使用的名稱是靜態的,並且用戶沒有輸入他們的名字,在這種情況下是「Jordan」。所以,在客戶端連接後,添加一個新的投標人,然後檢索並輸出。但是,當輸出我收到一個空指針異常。NullPointerException異常調用
檢索用戶名:
final ArrayList<String> userNames = new ArrayList<String>();
Bidder bidder1 = null;
final Bidder bidder = new Bidder(timeNow, client, bidder1, PORT);
final Users user = new Users(itemOne,itemTwo);
final ArrayList<ClientHandler> users =
new ArrayList<ClientHandler>();
do
{
client = serverSocket.accept();
System.out.println("\nUser" + (user.getNumOfUsers()+1)
+ " has been accepted to the auction system.\n");
System.out.println(bidder.getUserName());
user.incUsers(users, client, handler);
}while (true);
投標類:
class Bidder
{
private ArrayList<Bidder> userNamesHandle;
public Bidder(String name, Socket client, Bidder bidder, int i)
{
userNamesHandle = null;
}
public synchronized void createUser(ArrayList<Bidder> userList,final Socket
client,Bidder handler)
{
String name = "Jordan";
userList = userNamesHandle;
int incrementUsers=0;
for (final Bidder newBidder:userNamesHandle)
{
incrementUsers++;
}
userList.add(incrementUsers, handler = new Bidder(name, client, this, incrementUsers+1));
}
public synchronized Bidder getUserName()
{
int newNumOfUsers = 0;
if(userNamesHandle != null)
{
for(final Bidder String:userNamesHandle)
{
newNumOfUsers++;
}
}
return userNamesHandle.get(newNumOfUsers);
}
}
我認爲,用戶的姓名被添加到ArrayList不過,我無法恢復,和我不確定原因。
看看堆棧跟蹤。它會精確地告訴你在哪個源文件的哪一行發生'NullPointerException'。那裏有東西是'空'的。例如,當你試圖在一個'null'變量上調用一個方法時,你會得到這個異常。 – Jesper
似乎應該很簡單。你已經寫了一些相當複雜,不可讀的代碼。我看到你已經在Bidder類中聲明瞭userNamesHandle,但它從未在任何地方初始化過。如果你退出,你保證獲得NPE。 – duffymo
不要命名與普通類相同的變量,例如'String',或者像任何分區 –