JFileChooser NullPointerException

Karrzun

Mitglied
Hi zusammen,

ich habe ähnliche Probleme bereits im Internet gefunden, bei mir hat aber alles nicht geholfen. Insofern wende ich mich jetzt mal hier ans Forum.
Bei mir wird nach folgendem Code-Schnipselchen eine NullPointerException geworfen:

Java:
public static void browseButton(JTextField filePath){
    popUpBrowse = new GeometricObjectFileChooserBrowse(); 
 
    	int result = GeometricObjectFileChooserBrowse.chooser.showOpenDialog(popUpBrowse);{
    		// user wants to read the selected file
        	if (result == JFileChooser.APPROVE_OPTION) {
        		// get file path
        		File file = GeometricObjectFileChooserBrowse.chooser.getSelectedFile();
        		
        		// display file path
        		filePath.setText(file.getAbsolutePath());
        		
        		// dispose file selection frame
        		popUpBrowse.dispose();
        		
        		// selected file wasn't read yet
        		fileRead=false;
        		
        		// clear table
        		clearTable();
        		
        	// user wants to cancel
        	} else if (result == JFileChooser.CANCEL_OPTION) {
        	    popUpBrowse.dispose();
        	}
    	}
	}

Java:
 public class GeometricObjectFileChooserBrowse extends JFrame{
	public static JFileChooser chooser;
	
	public GeometricObjectFileChooserBrowse(){
		super();
		setup();
	}
	
	
	/**
	 * Sets up the file chooser frame.
	 */
	private void setup(){
    	setLocationRelativeTo(null);
    	
    	
    	chooser = new JFileChooser(); //XXX
    	
    	chooser.setMultiSelectionEnabled(false);
    	FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files (.txt)", "txt", "text");
    	chooser.setFileFilter(filter);
    	chooser.setCurrentDirectory(new File("."));
	}
}

Code:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at sun.awt.shell.Win32ShellFolder2.access$200(Unknown Source)
	at sun.awt.shell.Win32ShellFolder2$1.call(Unknown Source)
	at sun.awt.shell.Win32ShellFolder2$1.call(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Ich konnte den Fehler mit dem Debugger bis an die markierte Stelle ( //XXX ) zurückverfolgen, allerdings verstehe ich nicht, wie ich beim Aufruf eines Bibliotheks-Konstruktors in eine NullPointerExcepition laufe.


Ich hoffe, ihr könnt mir helfen. Schon mal vielen Dank im Vorab.

Mfg,
Karrzun


PS: Das Ganze ist übrigens keine Hausaufgabe o.Ä., also keine Sorge bzgl. "Spoilern" oder so... ;)
 
Zuletzt bearbeitet:

Flown

Administrator
Mitarbeiter
Also ich kann dir sagen, dass du bei einigen Stellen kein static benötigst, wie beim Filechooser und bei deiner Methode oben.

Liefere doch mal den ganzen Code, dann kann man dir auch ordentlich helfen.

Meine Vermutung ist eher, dass diese Zeile, der NPE Verursacher ist:
Java:
GeometricObjectFileChooserBrowse.chooser.showOpenDialog(popUpBrowse);
 

Karrzun

Mitglied
Nun... der ganze Code hat einen Umfang von rund 6.200 Codezeilen, die sich über 25(+-2) Klassen erstrecken... ich befürchte, das würde den Rahmen hier ein wenig sprengen, aber ich versuch mal, das Wichtigste darzustellen:

Meine Hauptklasse erzeugt und stellt eine GUI dar, in der man einen "Suchen"-Button bzw. ein "Suchen"-MenuItem wählen kann.
Java:
public class GeometricObjectRegister{
	static JFrame frame;
	static JLabel path;
	static JButton browseButton, newButton, readButton, saveButton, saveAsButton,
		createButton, editButton, deleteButton, collection;
	static JTextField filePath;
	static JScrollPane pane;
	public static JTable table;
	static String columns[] = {"Index", "Objekttyp", "Wert 1", "Wert 2", "Beschreibung"};
	static String data[][] = new String[1][5];
	public static DefaultTableModel model;
	static JMenuBar menuBar;
	static JMenu fileMenu, editMenu;
	static JMenuItem browseAction, newAction, readAction, saveAction, saveAsAction, exitAction,
		createAction, editAction, deleteAction;
	
	
	public static void main(String[] args){
		setupGraphics();
		setupButtons();
		setupMenu();
		RegisterFunctions.newButton();
	}
	
	/**
	 * Sets up all graphical components of the register.
	 */
	@SuppressWarnings("serial")
	private static void setupGraphics(){
		[...]
	}
	
	/**
	 * Sets up the button functions of all buttons used in the register.
	 */
	private static void setupButtons() {
		/**
		 * The browse button allows the user to browse the file system and choose a text file.
		 */
        browseButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            	RegisterFunctions.browseButton(filePath);
            }
        });
        
        [...]
	}
	
	/**
	 * Sets up the menu item functions of all menu items used in the register.
	 */
	private static void setupMenu(){
		/**
		 * The browse menu item allows the user to browse the file system and choose a text file.
		 */
		browseAction.addActionListener(new ActionListener(){
			public void actionPerformed(ActionEvent e){
				RegisterFunctions.browseButton(filePath);
			}
		});
		
		[...]
	}
}

Beide rufen offensichtlich die gleiche Methode auf (dementsprechend wird natürlich bei beiden de gleiche Fehler geworfen). Diese befindet sich ausgelagert in einer Klasse, in der der komplette Umgang mit allen Buttons und MenuItems der vorangehenden Klasse gehandelt wird:

Java:
public class RegisterFunctions {
	private static JTable t = GeometricObjectRegister.table;
	private static DefaultTableModel model = GeometricObjectRegister.model;
	private static GeometricObjectFileChooserBrowse popUpBrowse;
	private static GeometricObjectFileChooserSave popUpSave;
	private static GeometricObjectCreator popUpCreate;
	private static GeometricObjectEditor popUpEdit;
	
	private static boolean fileRead = false;
	private static boolean creating = false;
	private static boolean editing = false;
	
	
	/**
	 * The browse button allows the user to browse the file system and choose a text file.
	 */
	public static void browseButton(JTextField filePath){
		// if the user wanted to insert a new object into the table
		// or edit an existing one cancel the progress
		if(popUpCreate!=null)
			popUpCreate.dispose();
		if(popUpEdit!=null)
			popUpEdit.dispose();
    	

    	popUpBrowse = new GeometricObjectFileChooserBrowse();
 
    	int result = GeometricObjectFileChooserBrowse.chooser.showOpenDialog(popUpBrowse);{
    		// user wants to read the selected file
        	if (result == JFileChooser.APPROVE_OPTION) {
        		// get file path
        		File file = GeometricObjectFileChooserBrowse.chooser.getSelectedFile();
        		
        		// display file path
        		filePath.setText(file.getAbsolutePath());
        		
        		// dispose file selection frame
        		popUpBrowse.dispose();
        		
        		// selected file wasn't read yet
        		fileRead=false;
        		
        		// clear table
        		clearTable();
        		
        	// user wants to cancel
        	} else if (result == JFileChooser.CANCEL_OPTION) {
        	    popUpBrowse.dispose();
        	}
    	}
	}
 [...]
}

Aus dieser Methode wiederum wird ein JFileChooser erstellt, der für das Öffnen einer Datei zuständig ist:

Java:
public class GeometricObjectFileChooserBrowse extends JFrame{
	public static JFileChooser chooser;
	
	public GeometricObjectFileChooserBrowse(){
		super();
		setup();
	}
	
	
	/**
	 * Sets up the file chooser frame.
	 */
	private void setup(){
    	setLocationRelativeTo(null);
    	
    	chooser = new JFileChooser();
    	
    	chooser.setMultiSelectionEnabled(false);
    	FileNameExtensionFilter filter = new FileNameExtensionFilter("Text Files *.txt, *.text", "txt", "text");
    	chooser.setFileFilter(filter);
    	chooser.setCurrentDirectory(new File("."));
	}
}


Ich hoffe, das verschafft den nötigen Überblick über den Code.
Bestätigt Sie das in Ihrer Einschätzung der Fehlerquelle? Wenn ja, wie kann ich das denn umgehen?


Grüße,
Karrzun
 

Flown

Administrator
Mitarbeiter
Also die Fehlerquelle ist eindeutig, dass du static überall verwendest. Das hat nichts mit Objectorientierung zu tun und ist, wie du siehst, auch sehr fehleranfällig, wenn es nicht richtig gemacht wird.

Aber um nicht den ganzen Code zu bügeln, hier ein Lösungsvorschlag:

Java:
public class GeometricObjectFileChooserBrowse extends JFrame{
	public static JFileChooser chooser = new JFileChooser();
 

Karrzun

Mitglied
Wo ist static denn überflüssig? Wenn ich versuche, irgendwo ein static zu entfernen, bekomme ich direkt die Meldung
Java:
 Cannot make a static reference to a non-static method/field

Leider war Ihr Lösungsvorschlag auch nicht von Erfolg gekrönt. Jetzt wurde ein ExceptionInInitializerError geworfen caused by NPE.


//Edit:
Nebenbei sei bzgl der Objektorientierung vllt erwähnt, es gibt auch objektorientierte Klassen. Diese repräsentieren geometrische 2D-Objekte (Punkte, Halbgeraden, Polygone, ...). Eine Instanz einer solchen Klasse lässt sich in eine .txt Datei schreiben und aus einer solchen auch wieder laden.
Ziel der GUI ist es, eine .txt Datei zu laden, in der ein solches Objekt gespeichert ist und seine Eckdaten in die Table zu printen.
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Ich sehe hier zwei Baustellen:
1. Die ganzen statics loswerden. Das Problem ist, dass es nicht reicht, irgendwo eins zu löschen.
2. Den root cause für die Exception rausfinden.
Zu Punkt 1 äußere ich mich nur soweit, als dass ich den Punkt für ein einfaches refactoring , bei dem die ganzen gruseligen statics rausfliegen, schon für überschritten halt. Entweder du lässt alles so static wie es ist, solange bis gar nix mehr geht, oder du stellst dich dem Mammut.
zu Punkt 2:
Was macht das hier beim Kompilieren/laufen lassen?
Java:
public class JFileChooserTest{
    public static void main(String[] args){
        new JFileChooser().showSaveDialog(null);
    }
}
 

Karrzun

Mitglied
Also inzwischen hab ich mal bei mir im Freundeskreis rumgefragt: es läuft bei jedem und auf jedem Rechner - außer auf meinem.
Nachdem ich jetzt aber JDK, JRE und Eclipse neu installiert hab, erhalte ich den Fehler aber immer noch.

Da das Ganze augenscheinlich wohl in eine andere Richtung abdriftet: wäre es möglich, dieses Thema in ein entsprechendes Forum zu verschieben und umzubennen?


Grüße,
Karrzun
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S NullPointerException bei JFileChooser AWT, Swing, JavaFX & SWT 8
Tommy135 JFileChooser ist sehr langsam AWT, Swing, JavaFX & SWT 13
T JFileChooser ist Englisch und bleibt Englisch und bleibt Englisch... AWT, Swing, JavaFX & SWT 15
M Swing jFileChooser Header viewTypeDetails setFont AWT, Swing, JavaFX & SWT 0
I JFileChooser mit System L&F bei anderem L&F der eigtl. Anwendung AWT, Swing, JavaFX & SWT 0
Meeresgott AWT JFileChooser bestimmte Ordner anzeigen AWT, Swing, JavaFX & SWT 16
S Swing JFileChooser best. Ordner wie Dateien behandeln AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser für nicht existierendes Unterverzeichnis AWT, Swing, JavaFX & SWT 3
javampir Swing Anzeige der FileFilter im JFileChooser AWT, Swing, JavaFX & SWT 0
L JFileChooser Datentyp Unterscheidung AWT, Swing, JavaFX & SWT 6
H JFileChooser Dateinamen vorgeben (Save Dialog) AWT, Swing, JavaFX & SWT 9
Neumi5694 Swing JFilechooser - Detailansicht AWT, Swing, JavaFX & SWT 0
M JFileChooser Look and Feel AWT, Swing, JavaFX & SWT 2
T JFileChooser Rahmenfarbe ändern AWT, Swing, JavaFX & SWT 1
K Pfad mit JFileChooser ausgeben lassen AWT, Swing, JavaFX & SWT 7
C JFileChooser hängt bei Ausführung mit Terminal AWT, Swing, JavaFX & SWT 2
T Swing JFileChooser und FileView AWT, Swing, JavaFX & SWT 4
M Einzelne Ordner im JFileChooser ausgrauen? AWT, Swing, JavaFX & SWT 4
H Swing JFileChooser inline editing AWT, Swing, JavaFX & SWT 4
D JFileChooser anpassen AWT, Swing, JavaFX & SWT 5
AssELAss Verzeichnis JFileChooser aktualisieren AWT, Swing, JavaFX & SWT 0
A JFileChooser Datei speichern AWT, Swing, JavaFX & SWT 4
A Datei weiterverwenden mit JFileChooser AWT, Swing, JavaFX & SWT 6
T Importer-Auswahl im JFileChooser AWT, Swing, JavaFX & SWT 3
N JFileChooser bzw. FileDialog Problem AWT, Swing, JavaFX & SWT 10
A Swing JFileChooser - Größenänderung nach Aufruf von showOpenDialog() AWT, Swing, JavaFX & SWT 15
D Serverdirectory auf Client browsen mit JFileChooser AWT, Swing, JavaFX & SWT 7
F icon aus exe auslesen mithilfe des JFilechooser ? AWT, Swing, JavaFX & SWT 4
C JFileChooser und Netzwerk Laufwerke AWT, Swing, JavaFX & SWT 4
Iron Monkey JFileChooser - Drag and Drop AWT, Swing, JavaFX & SWT 5
J JFileChooser - Datei speichern AWT, Swing, JavaFX & SWT 7
M Element aus JList eines JFileChooser entfernen AWT, Swing, JavaFX & SWT 3
P JFileChooser mit verschidene Endungen AWT, Swing, JavaFX & SWT 12
S Swing Ordner im JFileChooser auswählen AWT, Swing, JavaFX & SWT 2
C JFileChooser bringt parent durcheinander AWT, Swing, JavaFX & SWT 2
N JFileChooser mit Dateinamenvorgabe AWT, Swing, JavaFX & SWT 9
S JFileChooser GTK (Ubuntu) "hässlich" AWT, Swing, JavaFX & SWT 2
A Swing JFileChooser mit modifiziertem Kontextmenü AWT, Swing, JavaFX & SWT 4
S JFileChooser öffnet den falschen Ordner AWT, Swing, JavaFX & SWT 4
A Swing JFilechooser zeigt verzeichnisse nicht an AWT, Swing, JavaFX & SWT 2
A Swing JFileChooser - Anzeige in Echtzeit filtern AWT, Swing, JavaFX & SWT 10
M JFileChooser umbenennen verbieten AWT, Swing, JavaFX & SWT 4
Helgon JFileChooser öffnet sich 2x AWT, Swing, JavaFX & SWT 12
K JFileChooser mit Zusatzfunktionen AWT, Swing, JavaFX & SWT 8
GUI-Programmer JFilechooser, mehrere Datein selektieren und Reihenfolge (2) AWT, Swing, JavaFX & SWT 8
V JFileChooser auf Mac und Netzwerkordner AWT, Swing, JavaFX & SWT 2
B JFileChooser breite der Spalten? AWT, Swing, JavaFX & SWT 5
M JFileChooser setCurrentDirectory() - Verzeichnis relativ zum Code/binary AWT, Swing, JavaFX & SWT 14
P Swing Dateinamen im JFileChooser vorschlagen AWT, Swing, JavaFX & SWT 11
M JFileChooser Abfangen des DateiTypen möglich?? AWT, Swing, JavaFX & SWT 5
T Swing JFileChooser --> Desktop und Laufwerke im "Suchen in" - Drop Down AWT, Swing, JavaFX & SWT 3
N JFileChooser - Keine Funtkion AWT, Swing, JavaFX & SWT 13
T JFileChooser - "Öffnen-Button" aktivieren/deaktivieren möglich??? AWT, Swing, JavaFX & SWT 2
jueki Aktuell eingestellten Filter aus einem JFileChooser abfragen. AWT, Swing, JavaFX & SWT 5
F Swing JFileChooser - Dateinamen nicht editierbar machen AWT, Swing, JavaFX & SWT 8
I Fehler bei JFileChooser AWT, Swing, JavaFX & SWT 2
K JFileChooser mehrere Dateien markieren ohne STRG AWT, Swing, JavaFX & SWT 4
Ivan Dolvich [Linux] JFileChooser sieht komisch aus... AWT, Swing, JavaFX & SWT 12
M Zurück-Button in JFileChooser AWT, Swing, JavaFX & SWT 9
N JFileChooser AWT, Swing, JavaFX & SWT 4
D Problem mit JFileChooser -> Daten werden mit anführungsstriche in JTable geschrieben AWT, Swing, JavaFX & SWT 8
S JFileChooser Dateiname Autovervollständigung AWT, Swing, JavaFX & SWT 2
B JDialog über JFileChooser anzeigen AWT, Swing, JavaFX & SWT 6
I Swing JFileChooser '\' im Pfad... AWT, Swing, JavaFX & SWT 2
K Swing JFileChooser zum Speichern - FileFilter AWT, Swing, JavaFX & SWT 2
M Swing Execption beim JFileChooser AWT, Swing, JavaFX & SWT 4
kodela Swing JFileChooser und die Datei-Extension AWT, Swing, JavaFX & SWT 3
jueki eigenen Button in JFileChooser einfügen AWT, Swing, JavaFX & SWT 7
alderwaran jFileChooser showSaveDialog, dateinamen werden mit pfadnamen überschrieben beim navigieren AWT, Swing, JavaFX & SWT 1
B Swing Suche JFileChooser zum Speichern AWT, Swing, JavaFX & SWT 2
Iron Monkey JFileChooser DIRECTORIES_ONLY AWT, Swing, JavaFX & SWT 4
Semox Swing JFileChooser: Problem Approve oder Cancel abzufangen AWT, Swing, JavaFX & SWT 7
H JTree - nach Auswahl aus JFileChooser wird nur der erste Knoten angezeigt AWT, Swing, JavaFX & SWT 3
kodela Sicherheitsabfrage mit JFileChooser AWT, Swing, JavaFX & SWT 2
DARK_ZERATO2 jFileChooser AWT, Swing, JavaFX & SWT 4
G JFileChooser Problem AWT, Swing, JavaFX & SWT 4
G Swing JFileChooser Event für neue Directory? AWT, Swing, JavaFX & SWT 5
P JFileChooser AWT, Swing, JavaFX & SWT 2
M Swing JFileChooser und JFrame AWT, Swing, JavaFX & SWT 5
G Swing JFileChooser in einem JPanel? AWT, Swing, JavaFX & SWT 3
J JFileChooser Dateiauswahl beim Tippen einschränken AWT, Swing, JavaFX & SWT 3
M Swing JFileChooser mit Windows 7 AWT, Swing, JavaFX & SWT 8
R JFileChooser - Initiales Verzeichnis auswählen AWT, Swing, JavaFX & SWT 8
brainray JFileChooser - es sollen nur Ordner wählbar sein AWT, Swing, JavaFX & SWT 2
T JFileChooser Problem AWT, Swing, JavaFX & SWT 3
N Mit JFileChooser ein Verzeichnis auswählen AWT, Swing, JavaFX & SWT 7
M Swing JFileChooser und versteckte Ordner AWT, Swing, JavaFX & SWT 2
F jFileChooser verwenden AWT, Swing, JavaFX & SWT 4
M Swing ImageIcon über JFileChooser einbinden AWT, Swing, JavaFX & SWT 4
F JFileChooser mal wieder AWT, Swing, JavaFX & SWT 2
ARadauer Swing JFileChooser mit Bildvorschau AWT, Swing, JavaFX & SWT 5
H Swing Dateiauswahldialog mit JFileChooser funktioniert unzuverlässig AWT, Swing, JavaFX & SWT 11
G Swing JFileChooser nur in Verzeichnis+Unterverzeichnisse AWT, Swing, JavaFX & SWT 5
K Swing JFileChooser AWT, Swing, JavaFX & SWT 6
M JFileChooser einschränken AWT, Swing, JavaFX & SWT 3
L JFileChooser braucht lang zum öffnen AWT, Swing, JavaFX & SWT 2
M JFilechooser defaultdirectory AWT, Swing, JavaFX & SWT 5
C JFilechooser this.setAlwaysOnTop AWT, Swing, JavaFX & SWT 2
G JFileChooser - erkennen v. existierenden Dateien ohne Endung AWT, Swing, JavaFX & SWT 1
N JFilechooser File auslesen AWT, Swing, JavaFX & SWT 10

Ähnliche Java Themen

Neue Themen


Oben