Ich habe eine einfache Server-und Client-Anwendung erstellt, wenn der Server ausgeführt wird und ein neuer Client verbindet, ein neuer Benutzer sollte der "Bidder" -Klasse hinzugefügt werden und ihr Name sollte ausgegeben werden In diesem Fall ist der Name, den ich verwende, statisch und der Benutzer hat seinen Namen nicht eingegeben, der in diesem Fall "Jordan" ist. Bei der Client-Verbindung wird ein neuer Bieter hinzugefügt, der dann abgerufen und ausgegeben wird. Bei der Ausgabe empfange ich jedoch eine Nullzeigerausnahme.NullPointerException beim Aufruf von get Funktion auf Array-Liste
den Namen des Benutzers abzurufen:
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);
Der Bieter Klasse:
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);
}
}
Ich glaube, dass der Name des Benutzers jedoch zu dem Arraylist hinzugefügt wird, ich es nicht abrufen kann, und ich bin unsicher warum.
Schauen Sie sich den StackTrace an. Es sagt Ihnen genau, in welcher Zeile der Quelldatei die 'NullPointerException' passiert. Etwas ist dort "null". Diese Ausnahme erhalten Sie beispielsweise, wenn Sie versuchen, eine Methode für eine Variable aufzurufen, die "null" ist. – Jesper
Scheint wie es sollte einfach sein. Sie haben einen ziemlich komplexen, nicht lesbaren Code geschrieben. Ich sehe, dass Sie userNamesHandle in der Bidder-Klasse deklariert haben, aber es wird nie irgendwo initialisiert. Wenn Sie dereferenzieren, dass Sie garantiert NPE bekommen. – duffymo
Benennen Sie keine Variablen, die den üblichen Klassen entsprechen, z. 'String', oder wie jeder clasess –