Nullpointer Exeption bei String Array

Status
Nicht offen für weitere Antworten.

Mericon

Mitglied
HuHu habe nochmal einproblem 🙁

und zwar schreibe ich mir einen kleinen Chat (vorerst zu übungszwecken) jetzt will ich eine funktion einfügen mit der ich Nutzer ignorieren kann. Aber immer wenn ich überprüfen will ob ein Autzer ignoriert wird bekomme ich eine nullpointer Exeption.

Hier mal ein bisschen code 😉

Java:
// connection.java

  public void loadIg(String[] ig) {
        for(int i =0; i<ignore.length; i++)
        {
            this.ignore[i] = ig[i];
        }
    }

    public boolean isIgno(String n) {
        for (int i = 0; i < ignore.length; i++) {
            if (ignore[i].equals(n)) {
                return true;                            // wenn ignoriert gebe true zurück!
            }
        }
        return false;
    }


// Chatserver.java

    public void broadcast(String msg, String channel, String nick) {
        int i;
        connection you;

        for (i = 0; i < connections.size(); i++) {
            you = (connection) connections.elementAt(i);
            if (nick.equals("System") || nick.equals("")) {
                if (you.getChannel().equals(channel)) {
                    you.out.println(parseCol(msg));
                }
            } else {
                if (!you.isIgno(nick)) {
                    if (you.getChannel().equals(channel)) {
                        you.out.println(parseCol(msg));
                    }
                }
            }
        }
    }

// database.java

    public String[] getIgno(String n) {
        int i = 0;
        String[] data = new String[20];
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost/chat", "chat", "test");
            stmt = con.createStatement();
            rs = stmt.executeQuery("SELECT usr FROM igno WHERE nick = '" + n + "'");
            while (rs.next()) {
                System.out.println(rs.getString(1));
                data[0] = rs.getString(1);
                i++;
            }
            rs.close();
            stmt.close();
            con.close();
            return data;
        } catch (SQLException e) {
            e.printStackTrace();
            System.exit(1);
        }
        return data;
    }

sooo dann fehlt ja nurnoch die meldung
Code:
Exception in thread "Thread-1" java.lang.NullPointerException
        at chat.connection.isIgno(connection.java:140)
        at chat.chatserver.broadcast(chatserver.java:74)
        at chat.connection.run(connection.java:102)

ich hoffe ihr könnt mir etwas weiter helfen 🙂
 
was ist den die variable ignore? sie wird wohl null sein...
 
Code:
Exception in thread "Thread-1" java.lang.NullPointerException
        at chat.connection.isIgno(connection.java:[B][SIZE="6"]140[/SIZE][/B])
        at chat.chatserver.broadcast(chatserver.java:74)
        at chat.connection.run(connection.java:102)
Wenn man jetzt wüsste was in Zeile 140 steht...
Vermutlich sind nicht alle Objekte in Deinen Array "ignore" initialisiert
 
Die variable ignore ist ein String array:

Java:
private String[] ignore = new String[20];

und zeile 140 ist diese:

Java:
if (ignore[i].equals(n)) {

wobei n ein string ist 🙂
 
dann ist ignore null. es werden also nicht alle elemente des arrays initialisiert. mach ma in deiner getIgno methode noch ne forschleife rein die alle 20 strings durchgeht und die auf "" setzt.
 
Die variable ignore ist ein String array:

Java:
private String[] ignore = new String[20];
Wenns ne ignore-liste ist nimm doch lieber was dynamisches (Vector, List etc.)...
Bei mir sind normalerweise ignore-listen auf 3-4 Leute beschränkt maximal, bei anderen hab ich schon 50+ gesehen. Bei mir würden eben einige null-pointer auftreten, bei anderen ArrayIndexOutOfBounds...
Java:
if (ignore[i].equals(n)) {

wobei n ein string ist 🙂

Naja, dann kannst du auch
Java:
n.equals(ignore[i])
nutzen, wenn du sicher bist das n dann nicht-null ist.
Unterschied wäre in etwa der: String.equals(null) statt null.equals(String).
 
wo die npe auftritt überprüfst du vorher auf != null, dann machst du was du auch immer machst....
 
Huhu danke schon mal für eure tips.

Stimmt nen Vector wäre warscheinlich angebrachter 🙂 hab nur etwas respekt vor den dingeren weil ich bei vectoren noch nicht so bewandert bin aber ich könnte mich ja ma einlesen.

mal sehn ob ich weiter komme 😉
 
So gelöst ist es nun auch 🙂

eins der probleme war das datenbank array die DB hat einige nullen zurückgegeben diese habe ich entfernt und die variable ignore auf einen vector umgearbeitet 🙂

vielen dank noch mal für eure tips🙂
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben