java.lang.NullPointerException

Status
Nicht offen für weitere Antworten.
P

petetheat

Gast
Ich hab folgendes Problem. Ich moechte Zeilen aus einer Textdatei einlesen und in Textfeldern ausgeben. In einem anderen Programm hat's auch super funktioniert.
In diesem hab ich eigentlich alles genauso uebernommen, bis auf den Unterschied, dass die Textfelder jetzt in einer anderen Klasse (InputView) eingebaut sind, waehrend bei dem anderen waren diese in der Hauptklasse (Main).
Da ich das GUI Fenster mit JPanel geteilt habe, sind jetzt die Textfelder halt in der Klasse InputView.

Code:
public void actionPerformed(ActionEvent e) {
        JFileChooser fc = new JFileChooser();
        fc.setAcceptAllFileFilterUsed(true);
        int returnVal = fc.showOpenDialog(inputView);
        
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            inputView.setTxt(file.getPath());
        } else {
            inputView.setTxt("No File selected");
        }
        
    }

Die Stelle inputView.setTxt(file.getPath()); ruft dann die java.lang.NullPointerException hervor.

Bei dem Programm, das funktioniert, steht derselbe Code wie oben, nur anstatt inputView steht dort main, weil dort setTxt und die Textfelder stehen.

Gruss, Pete
 

Niki

Top Contributor
Wo wird der Variable inputView ein Wert zugewiesen? Antwort: Nirgends, deswegen bekommst du auch eine NullPointerException. Irgendwo musst du stehn haben this.inputView = new InputView oder this.inputView = inputView
 
P

petetheat

Gast
Ich glaube, ich hab das ganze etwas missverstaendlich formuliert.

Also, im Code

Code:
public void actionPerformed(ActionEvent e) { 
        JFileChooser fc = new JFileChooser(); 
        fc.setAcceptAllFileFilterUsed(true); 
        int returnVal = fc.showOpenDialog(inputView); 
        
        if (returnVal == JFileChooser.APPROVE_OPTION) { 
            File file = fc.getSelectedFile(); 
            inputView.setTxt(file.getPath()); 
        } else { 
            inputView.setTxt("No File selected"); 
        } 
        
    }

ruft die Stelle inputView.setTxt(file.getPath()); die Exception hervor.

In der Klasse InputView ist aber setTxt definiert als:

Code:
public void setTxtNew(String filePath) {
        inputFields[1].setText(filePath);
    }

Also er soll erstmal nur den Pfad in das Textfeld schreiben.
Woran kann das liegen, dass das nicht funktioniert?
 
P

petetheat

Gast
Niki hat gesagt.:
Wo wird der Variable inputView ein Wert zugewiesen? Antwort: Nirgends, deswegen bekommst du auch eine NullPointerException. Irgendwo musst du stehn haben this.inputView = new InputView oder this.inputView = inputView

Und wo gehoert das rein?!?
 
S

SlaterB

Gast
irgendwo/ irgendwann VOR dem Aufruf,

wenn du einen Kuchen backen willst, dann musst du vorher auch die Zutaten einkaufen und in deiner Küche bereitstellen,
wann du das machst kann niemand sagen, hauptsache sie sind da, wenn du anfangen willst zu backen
 

Niki

Top Contributor
Wahrscheinlich in den Konstruktor. Ich bin ja kein Hellseher und weiß daher nicht wie du deine Applikation aufgebaut hast. Erzeugst du z.B. alle deine GUI Objekte an einer Stelle, dann gehört inputView als Paramenter dem Konstruktor der anderen Klasse (dort wo actionPerformed drinnen ist) übergeben. Im Konstruktor kannst du dann schreiben:
this.inputView = inputView (inputView muss dann sowohl dein Attribut als auch der Paramenter heißen)
Hier zur Verdeutlichung:
Code:
public static void main(String[] args){
  InputView iv = new InputView();
  HauptFenster hf = new HauptFenster(iv);

  hf.setVisible(true);
//.....

}


public class InputView extends JPanel{

}


public class HauptFenster extends JFrame{

  private InputView inputView = null;

  public HauptFenster(InputView inputView){
    this.inputView = inputView;
  }
}
 
P

petetheat

Gast
Ich hab's aber schon drin stehen:

Code:
public class OpenFile implements ActionListener {
    
    InputView inputView;
    
    public OpenFile(MainFrame mainFrame) {
        
        this.inputView = inputView;
    }

    public void actionPerformed(ActionEvent e) {
        JFileChooser fc = new JFileChooser();
        fc.setAcceptAllFileFilterUsed(true);
        int returnVal = fc.showOpenDialog(inputView);
        
        if (returnVal == JFileChooser.APPROVE_OPTION) {
            File file = fc.getSelectedFile();
            inputView.setTxtNew(file.getPath());
        } else {
            inputView.setTxtNew("No File selected");
        }
        
    }
    
}
 

Niki

Top Contributor
Nein hast du nicht, du müsstest eigentlich eine Warning angezeigt bekommen, dass die Zuweisung keinen Sinn ergibt. Du übergibt inputView nicht als Parameter. Das was du machst ist das selbe wie this.inputView = this.inputView.
 
G

Guest

Gast
Deine Zeile 7 darf nicht lauten

Code:
this.inputView = inputView;

sondern muss lauten:

Code:
this.inputView = new InputView();

Gruß
Eminent
 
P

petetheat

Gast
Ok, der Fehler ist jetzt weg, ich hab die Stelle gefunden, wo's reingehoert.
Aber ich verstehe trotzdem nicht, warum das ueberhaupt dort rein muss, ich meine hab ja eine Klasse InputView.

Ich bin totaler Anfaenger in Java, aber das habt ihr sicherlich schon gemerkt :)
 

Niki

Top Contributor
Eine Klasse zu haben heißt nicht dass du ein Objekt von dieser Klasse angelegt hast ( = Instanz).
Es gibt Methoden, die gehören zu Instanzen und es gibt Methoden die einer Klasse gehören. Methoden die zu einer Klasse gehören und keinen Instanz-Context haben sind mit dem Schlüsselwort "static" versehn:
z.B.

Code:
public class Duh {
public static void duhWasStatisch(){

}

public void duhWasNichtStatisch(){

}

//Aufrufe wären:
//statisch:
Duh.duhWasStatisch();

//nicht statisch:

//1. Objekt anlegen:
Duh duh = new Duh();
//2. Methode des Objektes aufrufen:
duh.duhWasNichtStatisch();

statische Methoden kannst du als Funktionen betrachten, die keinen Bezug zu einem Objekt haben. So wie die Methode Math.random().

Vielleicht ist dir ja jetzt so manches klarer :)
 
G

Guest

Gast
petetheat hat gesagt.:
Ok, der Fehler ist jetzt weg, ich hab die Stelle gefunden, wo's reingehoert.
Aber ich verstehe trotzdem nicht, warum das ueberhaupt dort rein muss, ich meine hab ja eine Klasse InputView.

Ich bin totaler Anfaenger in Java, aber das habt ihr sicherlich schon gemerkt :)

Du hast zwar eine Klasse InputView, aber um Methoden dieser Klasse aufrufen zu können musst du sie vorher instanziieren und das machst du mit dem new InputView(). Dadurch erhälst du eine Instanz der Klasse, mit der du dann weiter arbeiten kannst und vor allem von der du auch die Methoden der Klasse aufrufen kannst.
 
P

petetheat

Gast
Das Problem mit der NullPointerException ist zwar geloest, aber dadurch, dass ich jetzt

Code:
public void setTxt(String sFilePath) {
        inputView = new InputView();
        inputView.setTxtNew(sFilePath);
    }

aufrufe, erzeuge ich ja eine neue Instanz (hab ich doch richtig verstanden, oder?)

Jetzt hab ich aber bereits vorher die Textfelder erzeugt und zwar in derselben Klasse InputView. Da ich aber jetzt die Instanze neu erzeuge, wird der Inhalt der Textdatei nicht in die bestehenden Textfelder geladen, sondern in die der neuen Instanz und diese sind nicht sichtbar.

Gibt es eine Moeglichtkeit, anstatt mit inputView = new InputView(); eine neue Instanz zu erzeugen, die bestehende aufzurufen?

Ich weiss nicht, ob das alles so Sinn macht, wie ich das schreibe, aber ich hoffe, es ist doch verstaendlich genug...
 

Niki

Top Contributor
inputView = new InputView();
solltest du nicht in der Methode setText schreiben, sondern nur EINMAL im Konstruktor. Dann wird immer die selbe Instanz verwendet.
 
P

peteheat

Gast
Aber das hab ich doch, oder nicht? Ich mein, ich mach das in der Klasse TextFrame

Code:
public TextFrame() {
        
        super(new BorderLayout());
        
        JPanel viewAll = new JPanel(new BorderLayout());
        
        JPanel inputPanel = new JPanel(new GridLayout(1,1));
                        
        inputView = new InputView();
        inputPanel.add(inputView);
                
        viewAll.add(inputPanel, BorderLayout.WEST);
        
        JPanel viewPanel = new JPanel(new GridLayout(5,1));
        viewAll.add(viewPanel, BorderLayout.EAST);
        
        add(viewAll);
        
    }

In InputView stehen dann die Textfelder, welche ich mit dem Dateiinhalt fuellen moechte.

Und TextFrame wird in der Mainklasse aufgerufen:

Code:
public void createView() {
        textFrame = new TextFrame();
        getContentPane().add(textFrame);
        
        setVisible(true);
    }

In dieser Mainklasse ist auch das Menu implementiert, aus dem der Aufruf kommt, die Datei zu laden.

setTxt so wie's im Post vorher steht, steht dann auch in der Mainklasse und soll dann setTxtNew ausfuehren, welches wiederrum in InputView steht.

Ich weiss, ist wahrscheinlich alles ziemlich umstaendlich, aber ich hab's so zum laufen bekommen....
 

Niki

Top Contributor
petetheat hat gesagt.:
Code:
public void setTxt(String sFilePath) {
        inputView = new InputView();
        inputView.setTxtNew(sFilePath);
    }

Lösch das inputView = new InputView(); mal raus. Also so:

Code:
public void setTxt(String sFilePath) {       
        inputView.setTxtNew(sFilePath);
    }

Das könnte schon die Lösung für dein Problem sein
 
P

petetheat

Gast
Das hatte ich ja ganz am Anfang so, dann hab ich die NullPointerException bekommen.

Ich hab das ganze jetzt folgendermassen geloest (unter Mithilfe eines Kollegen):

Ich hab in der Klasse TextFrame (wo ja inputView = new InputView(); schon aufgerufen wird) folgendes hinzugefuegt:

Code:
public InputView getInputView() {
        return this.inputView;
    }

Dann hab ich die Methode setTxt folgendermassen abgeaendert:

Code:
public void setTxt(String sFilePath) {
        textFrame.getInputView().setTxtNew(sFilePath);
   }

Jetzt laeuft's wie gewuenscht. Ist wahrscheinlich ziemlich umstaendlich, aber ich bin froh, dass es geht :)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Fehlermeldung java.lang.NullPointerException Java Basics - Anfänger-Themen 4
D java.lang.NullPointerException Java Basics - Anfänger-Themen 19
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
B java.lang.NullPointerException bei javafx Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
H java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G java.lang.NullPointerException Java Basics - Anfänger-Themen 3
E Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 2
J java.lang.NullPointerException in meiner JavaFXControllerKlasse Java Basics - Anfänger-Themen 26
D Communications link failure | java.lang.NullPointerException Java Basics - Anfänger-Themen 3
F java.lang.NullPointerException, kann aber nicht sein! Java Basics - Anfänger-Themen 4
M Compiler-Fehler Java suckt - java.lang.NullPointerException Java Basics - Anfänger-Themen 12
L Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S java.lang.NullPointerException Java Basics - Anfänger-Themen 4
G Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 4
A Compiler-Fehler Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 7
P Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 3
T Problem mit Eclipse? Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 4
S Fehler: "java.lang.NullPointerException" Java Basics - Anfänger-Themen 6
I Erste Schritte Ausführfehler: java.lang.NullPointerException Java Basics - Anfänger-Themen 3
1 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException Java Basics - Anfänger-Themen 5
S Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 11
V [Greenfoot] java.lang.NullPointerException Java Basics - Anfänger-Themen 12
S Compiler-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J java.lang.NullPointerException Java Basics - Anfänger-Themen 18
K Interpreter-Fehler java.lang.NullPointerException Java Basics - Anfänger-Themen 6
K OOP java.lang.NullPointerException Java Basics - Anfänger-Themen 2
B Exception in thread "main" java.lang.NullPointerException Fehler Hilfe! Java Basics - Anfänger-Themen 4
S Fehlermeldung: java.lang.NullPointerException Java Basics - Anfänger-Themen 10
A Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 16
K java.lang.NullPointerException in Array bei Arraylistübergabe Java Basics - Anfänger-Themen 7
G java.lang.NullPointerException Was tun? Java Basics - Anfänger-Themen 7
J java.lang.NullPointerException . Java Basics - Anfänger-Themen 5
G java.lang.NullPointerException Java Basics - Anfänger-Themen 2
S java.lang.NullPointerException - Bitte helft mir! Java Basics - Anfänger-Themen 5
S java.lang.NullPointerException Fehler bei Umrechnung Java Basics - Anfänger-Themen 3
M java.lang.NullPointerException at . Java Basics - Anfänger-Themen 4
S java.lang.nullpointerexception bei arrayübergabe Java Basics - Anfänger-Themen 30
S java.lang.NullPointerException bei Bildern Java Basics - Anfänger-Themen 13
P java.lang.NullPointerException was ist das? Java Basics - Anfänger-Themen 7
G java.lang.NullPointerException beim objekt Java Basics - Anfänger-Themen 3
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
JaVaN0oB java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 18
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
H JUnit in Eclipse: java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 9
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
B java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 3
P java.lang.ClassCastException Bedeutung und Lösung Java Basics - Anfänger-Themen 3
J Erste Schritte java.lang.NoClassDefFoundError Java Basics - Anfänger-Themen 4
I java.lang.ArrayIndexOutOfBoundsException at lösung.main Java Basics - Anfänger-Themen 3
T Compiler-Fehler java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 2
R java.lang.ArrayIndexOutOfBoundsException: 0 Rechner Error Java Basics - Anfänger-Themen 4
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
N jodaTime java.lang.IllegalArgumentException: Invalid format Java Basics - Anfänger-Themen 3
F Erste Schritte java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 3
R java.lang.StringIndexOutOfBoundsException Java Basics - Anfänger-Themen 1
V java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 2
H java.lang.NoClassDefFoundError Run as>> Run on Server Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
M java.lang.Enum.valueOf(Unknown Source) Java Basics - Anfänger-Themen 2
L Compiler-Fehler Problem beim Programmieren eines Kalenders (java.lang.ArrayIndexOutOfBoundsException) Java Basics - Anfänger-Themen 2
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11
P Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 1
C Hilfe!!! java.lang.ClassCastException Java Basics - Anfänger-Themen 1
O java.lang.IndexOutOfBoundsException JTable autoSort Java Basics - Anfänger-Themen 5
W Methoden Rückgabedatentyp java.util.Map<java.lang.String,? extends ...> Java Basics - Anfänger-Themen 4
F Exception in thread main java.lang.StackOverflowError Java Basics - Anfänger-Themen 3
K Caused by: java.lang.NoClassDefFoundError: org/mindrot/jbcrypt/BCrypt Java Basics - Anfänger-Themen 0
OnDemand java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 9
J Klassen java.lang.String - lexikographisches Sortieren Java Basics - Anfänger-Themen 5
T Erste Schritte import java.lang.System.out Java Basics - Anfänger-Themen 4
H Classpath java.lang.NoClassDefFoundError externe Libary Java Basics - Anfänger-Themen 4
M Exception in thread "main" java.lang.NoClassDefFoundError: MeineKlasse Java Basics - Anfänger-Themen 12
X Applet Fehler: java.lang.reflect.InvocationTargetException Java Basics - Anfänger-Themen 45
B java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
H java.lang.IndexOutOfBoundsException bei verschachtelter ArrayList Java Basics - Anfänger-Themen 9
V java.lang.NoSuchMethodError Java Basics - Anfänger-Themen 2
J java.lang.math asin() Java Basics - Anfänger-Themen 18
R Compiler-Fehler java.lang.ArrayIndexOutOfBoundsException, warum? Java Basics - Anfänger-Themen 6
K Error: java.lang.NoSuchMethodException Java Basics - Anfänger-Themen 2
M Compiler-Fehler Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 2
G java.lang.ClassNotFoundException Java Basics - Anfänger-Themen 4
S String index out of range: 8 at java.lang.String.substring(Unknown Source) Java Basics - Anfänger-Themen 13
X Interpreter-Fehler "java.lang.NullPionterException: null" bei BlueJ Java Basics - Anfänger-Themen 10
P java.lang.ClassCastException Java Basics - Anfänger-Themen 2
D java.lang.NoSuchMethodError: main Java Basics - Anfänger-Themen 11
S expected java.lang.string but found char Java Basics - Anfänger-Themen 5
S Umgebungsvariable Exception in thread "main" java.lang.UnsatisfiedLinkError: no J3D in java.librar y.path Java Basics - Anfänger-Themen 15
S Compiler-Fehler java.lang.SecurityException: Invalid signature file digest for Manifest main attributes Java Basics - Anfänger-Themen 5
M Klassen Exception in thread "main" java.lang.NoClassDefFoundError: Java Basics - Anfänger-Themen 2
A Compiler-Fehler unreported exception java.lang.Exception; must be caught or declared to be thrown Java Basics - Anfänger-Themen 7
K Fehlermeldung: java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 Java Basics - Anfänger-Themen 4
M Datentypen java.util.Arrays$ArrayList cannot be cast to [Ljava.lang.String; Java Basics - Anfänger-Themen 11
F Ich kenn mich nicht mehr aus - 'java.lang.NoSuchMethodError: main' in Applet? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben