Hoffnungslose Fehlersuche

NG_Loc

Mitglied
Einen schönen Abend wünsche ich,
der Titel spiegelt schon ziemlich genau mein Problem wieder. In meinem folgenden Programm steckt ein Fehler, den ich aber nicht erkenne. Ich hoffe ihr könnt mir helfen.
Ich hoffe, dass man versteht was ich machen will. Da, wo er die Exception ausspuckt (ButtonFrame:32) möchte ich zuerst Dateinamen(in einem FileArray) einlesen und dann als Titel für die Button festlegen.

Exception
Code:
Exception in thread "main" java.lang.NullPointerException
Code:
at ButtonFrame.<init>(ButtonFrame.java:37)
Code:
at iAccountManager.main(iAccountManager.java:10)

"Hauptklasse:"

Java:
public class iAccountManager {
	public static void main(String[] args) {
		
		//Test, ob Programm startet
		//JOptionPane.showConfirmDialog(null, "Programmstart!", "Warning", JOptionPane.WARNING_MESSAGE);
		
		ButtonFrame bf = new ButtonFrame("iAccount");
		bf.setVisible(true);
		bf.setSize(245, 238);
		bf.setLocationRelativeTo(null);
		
	}

}

"ButtonFrame :"

Java:
public class ButtonFrame extends JFrame  implements ActionListener {
	
	//Account-Strings
	String bn_acc1;
	String pw_acc1;
	String bn_acc2;
	String pw_acc2;
	String bn_acc3;
	String pw_acc3;
	String bn_acc4;
	String pw_acc4;
	String bn_acc5;
	String pw_acc5;
	
	//Objekte
	JButton b_acc1;
	JButton b_acc2;
	JButton b_acc3;
	JButton b_acc4;
	JButton b_acc5;
	
	ButtonFrame(String titel) {
		super(titel);
		
		//Benutzernamen-Auslesen
		System.out.println("Benutzernamen auslesen!");
		AccountVerwaltung av = new AccountVerwaltung();
		File[] accountNamen = av.accountSpeichern();
		
		//bis hier hin erfolgreich
		
		for(int i = 0; i < accountNamen.length; i++) {
			System.out.println(accountNamen[i].getName());
		}
		
		//Benutzernamen-Zuweisen
		System.out.println("Benutzernamen zuweisen!");
		
		
		if(accountNamen.length >= 1) {
			bn_acc1 = accountNamen[0].getName().replace(".txt", "");
		} else {
			bn_acc1 = "nicht vergeben";
		}
		
		if(accountNamen.length >= 2) {
			bn_acc2 = accountNamen[1].getName().replace(".txt", "");
		} else {
			bn_acc2 = "nicht vergeben";
		}
		
		if(accountNamen.length >= 3) {
			bn_acc3 = accountNamen[2].getName().replace(".txt", "");
		} else {
			bn_acc3 = "nicht vergeben";
		}
		
		if(accountNamen.length >= 4) {
			bn_acc4 = accountNamen[3].getName().replace(".txt", "");
		} else {
			bn_acc4 = "nicht vergeben";
		}
		
		if(accountNamen.length >= 5) {
			bn_acc5 = accountNamen[4].getName().replace(".txt", "");
		} else {
			bn_acc5 = "nicht vergeben";
		}
		
		//Passwörter
		pw_acc1 = "";
		pw_acc2 = "";
		pw_acc3 = "";
		pw_acc4 = "";
		pw_acc5 = "";
		
		
		//Layout-Manager
		//setLayout(new FlowLayout());
		setLayout(null);
		
		//***********************************************
		//Objekte
		
		//Button-Account 1
		b_acc1 = new JButton(bn_acc1);
		b_acc1.setActionCommand("Button1");
		b_acc1.addActionListener(this);
		
		//Button-Account 2
		b_acc2 = new JButton(bn_acc2);
		b_acc2.setActionCommand("Button2");
		b_acc2.addActionListener(this);
		
		//Button-Account 3
		b_acc3 = new JButton(bn_acc3);
		b_acc3.setActionCommand("Button3");
		b_acc3.addActionListener(this);

		//Button-Account 2
		b_acc4 = new JButton(bn_acc4);
		b_acc4.setActionCommand("Button4");
		b_acc4.addActionListener(this);

		//Button-Account 2
		b_acc5 = new JButton(bn_acc5);
		b_acc5.setActionCommand("Button5");
		b_acc5.addActionListener(this);
		
		//***********************************************
		
		//Objekte platzieren
		b_acc1.setBounds(10, 10, 210, 28);
		b_acc2.setBounds(10, 48, 210, 28);
		b_acc3.setBounds(10, 86, 210, 28);
		b_acc4.setBounds(10, 124, 210, 28);
		b_acc5.setBounds(10, 162, 210, 28);
		
		//Objekte hinzufügen
		add(b_acc1);
		add(b_acc2);
		add(b_acc3);
		add(b_acc4);
		add(b_acc5);
		
		//Anwendung schließen, wennFenster geschlossen wird
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
	}
	
	//ActionListener
	public void actionPerformed(ActionEvent e) {
		String quelle = e.getActionCommand();
		System.out.println("Button: '" + quelle + "'");
		
		if(quelle.equals("Button1")) {
			
			AccountVerwaltung av = new AccountVerwaltung();
			String benutzername = av.buttonAction(bn_acc1, pw_acc1);
			
			if(bn_acc1.equals("nicht vergeben")) {
				b_acc1.setText(benutzername);
				int neustart = JOptionPane.showConfirmDialog(null, "Programm muss neu gestartet werden", "Warning", JOptionPane.WARNING_MESSAGE);
				switch(neustart) {
				case JOptionPane.OK_OPTION: System.out.println("Programm wird beendet"); System.exit(0); break;
				case JOptionPane.CANCEL_OPTION: break;
				default: break;
				}
			}
			
		} else if(quelle.equals("Button2")) {
			
			AccountVerwaltung av = new AccountVerwaltung();
			String benutzername = av.buttonAction(bn_acc2, pw_acc2);
			
			if(bn_acc2.equals("nicht vergeben")) {
				b_acc2.setText(benutzername);
				int neustart = JOptionPane.showConfirmDialog(null, "Programm muss neu gestartet werden", "Warning", JOptionPane.WARNING_MESSAGE);
				switch(neustart) {
				case JOptionPane.OK_OPTION: System.out.println("Programm wird beendet"); System.exit(0); break;
				case JOptionPane.CANCEL_OPTION: break;
				default: break;
				}
			}
			
		} else if(quelle.equals("Button3")) {
			
			AccountVerwaltung av = new AccountVerwaltung();
			String benutzername = av.buttonAction(bn_acc3, pw_acc3);
			
			if(bn_acc3.equals("nicht vergeben")) {
				b_acc3.setText(benutzername);
				int neustart = JOptionPane.showConfirmDialog(null, "Programm muss neu gestartet werden", "Warning", JOptionPane.WARNING_MESSAGE);
				switch(neustart) {
				case JOptionPane.OK_OPTION: System.out.println("Programm wird beendet"); System.exit(0); break;
				case JOptionPane.CANCEL_OPTION: break;
				default: break;
				}
			}
			
		} else if(quelle.equals("Button4")) {
			
			AccountVerwaltung av = new AccountVerwaltung();
			String benutzername = av.buttonAction(bn_acc4, pw_acc4);
			
			if(bn_acc4.equals("nicht vergeben")) {
				b_acc4.setText(benutzername);
				int neustart = JOptionPane.showConfirmDialog(null, "Programm muss neu gestartet werden", "Warning", JOptionPane.WARNING_MESSAGE);
				switch(neustart) {
				case JOptionPane.OK_OPTION: System.out.println("Programm wird beendet"); System.exit(0); break;
				case JOptionPane.CANCEL_OPTION: break;
				default: break;
				}
			}
			
		}else if(quelle.equals("Button5")) {
			
			AccountVerwaltung av = new AccountVerwaltung();
			String benutzername = av.buttonAction(bn_acc5, pw_acc5);
			
			if(bn_acc5.equals("nicht vergeben")) {
				b_acc5.setText(benutzername);
				int neustart = JOptionPane.showConfirmDialog(null, "Programm muss neu gestartet werden", "Warning", JOptionPane.WARNING_MESSAGE);
				switch(neustart) {
				case JOptionPane.OK_OPTION: System.out.println("Programm wird beendet"); System.exit(0); break;
				case JOptionPane.CANCEL_OPTION: break;
				default: break;
				}
			}
			
		}
		
	}
}

"AccountVerwaltung :"

Java:
public class AccountVerwaltung {
	
	String working_dir = System.getProperty("user.dir");
	DateiVerwaltung dv = new DateiVerwaltung();
	
	String buttonAction(String benutzername, String passwort) {
		if(benutzername.equals("nicht vergeben")) {
			System.out.println("Neuen Benutzernamen einlesen");
			
			benutzername = JOptionPane.showInputDialog("Geben Sie Ihren Benutzernamen ein:");
			passwort = JOptionPane.showInputDialog("Geben Sie Ihr Passwort ein:");
			JOptionPane.showMessageDialog(null, "Benutzername: " +benutzername + "\nPasswort: " + passwort);
			System.out.println("Benutzername: " +benutzername + "\nPasswort: " + passwort);
			
			DateiVerwaltung dv = new DateiVerwaltung();
			dv.dateiAusgabe(benutzername, passwort);
			
			return benutzername;
		}
		//Benutzername in Zwischenablage
		StringSelection strSelec = new StringSelection(benutzername);
		Toolkit.getDefaultToolkit().getSystemClipboard().setContents(strSelec, null);
	
		System.out.println("'" + benutzername + "' in Zwischenablage kopiert");
		
		return null;
	}

	File[] accountSpeichern() {
		File dateiPfad = new File(working_dir + "//data");
		System.out.println("Dateipfad:__" + dateiPfad);
		File[] accountNamen = dv.listDir(dateiPfad);
		System.out.println("Return AccountNamen:");
		return accountNamen;
	}
}

"DateiVerwaltung:"

Java:
public class DateiVerwaltung {
	
	String working_dir = System.getProperty("user.dir");
	
	void dateiAusgabe(String benutzername, String passwort) {
		PrintWriter ausgabe;
		
		try {
			
			System.out.println(working_dir);
			
			
			//In Datei schreiben
			ausgabe = new PrintWriter(working_dir + "//data//" + benutzername + ".txt");
			
			ausgabe.println(benutzername + " " + passwort);
			
			ausgabe.close();
			
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	String dateiEinlesen (String dateiPfad) {
		Scanner dateiEinlesenScanner = new Scanner(dateiPfad);
		String dateiInhalt = dateiEinlesenScanner.nextLine();
		dateiEinlesenScanner.close();
		
		return dateiInhalt;
	}

	String pfadAuswaehlen() {
		JFileChooser fc = new JFileChooser();
		fc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
		
		int state = fc.showOpenDialog(null);
		String ordnerPfad = null;
		if(state == JFileChooser.APPROVE_OPTION) {
			File datei = fc.getSelectedFile();
			ordnerPfad = datei.getAbsolutePath();
			System.out.println(ordnerPfad);
		}
		return ordnerPfad;
	}
	
	public File[] listDir(File dir) {
		 
		  File[] files = dir.listFiles();
		  if (files != null) { // Erforderliche Berechtigungen etc. sind vorhanden
		    for (int i = 0; i < files.length; i++) {
		      System.out.print(files[i].getAbsolutePath());
		      if (files[i].isDirectory()) {
		        System.out.println(" (Ordner)");
		      }
		      else {
		        System.out.println(" (Datei)");
		      }
		    }
		  }
		return files;
	}
	
	boolean checkOrdner(String ordnerName)
	{
		File stats = new File(ordnerName);
		if (stats.exists()) { // Überprüfen, ob es den Ordner gibt
			return true;
		} else {
			if (stats.mkdir()) { // Erstellen des Ordners
				return true;
			} else {
				return false;
			}
		}
	}

}

Vielen Dank im Vorraus! ;)
 

headnut

Gesperrter Benutzer
Hier Versuchst du auf ein Array zuzugreiffen, obwohl du dieses nirgends mit einer Grösse belegst...

Java:
        for(int i = 0; i < accountNamen.length; i++) {
            System.out.println(accountNamen[i].getName());
        }


Du musst irgend etwas in dieser Form machen


Java:
        File[] test = new File[10];
        
        for (int i = 0; i < test.length; i++) {
			test[i] = new File("temp");
		}
 

njans

Top Contributor
verlesen ^^

Java:
File[] files = dir.listFiles();
          if (files != null) { // Erforderliche Berechtigungen etc. sind vorhanden
            for (int i = 0; i < files.length; i++) {
              System.out.print(files[i].getAbsolutePath());
              if (files[i].isDirectory()) {
                System.out.println(" (Ordner)");
              }
              else {
                System.out.println(" (Datei)");
              }
            }
          }
        return files;
    }

Wenn files == null ist, dann gibst du das einfach zurück. Das geht dann weiter, bis du versuchst auf dem Array etwas zu machen. Wenn du schon prüfst, ob es null ist, dann solltest du auch etwas tun, wenn es null ist ^^ Z.B. ein leeres Array erstellen.

[TIPP]
Headnut hat da wohl was falsch verstanden. Sein Vorschlag löst das Problem nicht.
[/TIPP]
 
Zuletzt bearbeitet:

NG_Loc

Mitglied
Danke für die schnelle Antwort :)

Also ich habs jetzt hier geändert:

Java:
//Benutzernamen-Auslesen
		System.out.println("Benutzernamen auslesen!");
		AccountVerwaltung av = new AccountVerwaltung();
		File[] accountNamen = new File[5];
		accountNamen = av.accountSpeichern();
		
		//bis hier hin erfolgreich
		
		for(int i = 0; i < accountNamen.length; i++) {
			System.out.println(accountNamen[i].getName());
		}

und in der anderen Klasse auch:

Java:
File[] accountSpeichern() {
		File dateiPfad = new File(working_dir + "//data");
		System.out.println("Dateipfad:__" + dateiPfad);
		File[] accountNamen = new File[5];
		accountNamen = dv.listDir(dateiPfad);
		System.out.println("Return AccountNamen:");
		return accountNamen;
	}


Geht aber immer noch nicht :/ oder hab ich da jetzt was falsch verstanden?

Grüße
Nico
 

njans

Top Contributor
Bitte meinen Post zuvor lesen (Editiert).
Headnuts Vorschlag hilft dir nicht, da dein Problem von deiner DateiVerwaltung ausgeht.
 

NG_Loc

Mitglied
*hust*, da kommt der Anfänger ins Stocken :D

Meinst du sowas in der Art:

Java:
public File[] listDir(File dir) {
		 
		  File[] files = dir.listFiles();
		  if (files != null) { // Erforderliche Berechtigungen etc. sind vorhanden
		    for (int i = 0; i < files.length; i++) {
		      System.out.print(files[i].getAbsolutePath());
		      if (files[i].isDirectory()) {
		        System.out.println(" (Ordner)");
		      }
		      else {
		    	  
		        System.out.println(" (Datei)");
		      }
		    }
		  } else {
			  files = null;
		  }
		return files;
	}

Ist das dann ein "leeres" Array?
Jedenfalls geht es damit nicht^^
 

NG_Loc

Mitglied
"Geht nicht" heißt in diesem Fall gleiche Fehlermeldung wie zuvor. Sonst hätte ich geschrieben:
Jetzt hab ich ne andere Fehlermeldung ;)
 

xehpuk

Top Contributor
Wenn
Code:
files == null
, machst du
Code:
files = null
. Irgendwie ein wenig sinnlos, oder? ;)
Dein Problem ist doch gerade, dass da null rauskommt.

Mach einfach ein leeres Array draus:
Java:
public File[] listDir(File dir) {
    File[] files = dir.listFiles();
    if (files == null)
        files = new File[0];
    // ....
    return files;
}
 

NG_Loc

Mitglied
Das macht Sinn :D

Hat funktioniert :toll:

Ich bin echt begeistert von eurem Forum/eurer Community. Werde euch weiterempfehlen.
Nochmals Vielen Dank. Ich denke wir hören noch voneinander ;)

Grüße
Nico
 

Landei

Top Contributor
Wenn du lernst, wie man einen Debugger bedient, wäre es nicht so "hoffnungslos" gewesen. Ist alles ganz einfach (wenn auch in jeder IDE ein wenig anders): Breakpoint setzen, Anwendung im Debug-Modus starten, schrittweise sehen was passiert...
 

njans

Top Contributor
Wenn du lernst, wie man einen Debugger bedient, wäre es nicht so "hoffnungslos" gewesen. Ist alles ganz einfach (wenn auch in jeder IDE ein wenig anders): Breakpoint setzen, Anwendung im Debug-Modus starten, schrittweise sehen was passiert...

Außer man nutzt BlueJay, das ist furchtbar. Ich werde wohl eine Woche lang gegen diese "IDE" Protest erheben!
Nebenbei: Ein einfaches System.out.println() hilft doch auch, die Exception sagt ja schon, wo das Problem ist ^^
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Fehlersuche-kann mir jemand helfen? Java Basics - Anfänger-Themen 46
T Fehlersuche Java Basics - Anfänger-Themen 12
A Fehlersuche Java Basics - Anfänger-Themen 2
MR._FIRE_Flower Programm Fehlersuche Java Basics - Anfänger-Themen 16
T Hilfe bei der Fehlersuche Java Basics - Anfänger-Themen 23
D Fehlersuche Java Basics - Anfänger-Themen 9
S brauche hilfe bei Fehlersuche Java Basics - Anfänger-Themen 7
1 Fehlersuche Java Basics - Anfänger-Themen 4
C Fehlersuche Adressbuch *Anfänger* Java Basics - Anfänger-Themen 5
L ReplaceALL - Fehlersuche Java Basics - Anfänger-Themen 11
A Java Fehlersuche Java Basics - Anfänger-Themen 2
I Anfängerfrage: Fehlersuche Java Basics - Anfänger-Themen 2
S Fehlersuche(NullPointerException) Java Basics - Anfänger-Themen 5
S Fehlersuche bzw beheben Java Basics - Anfänger-Themen 9
P Fehlersuche bzgl. Array-Keys Java Basics - Anfänger-Themen 6
N Fehlersuche Printwriter Java Basics - Anfänger-Themen 6
N Hilfe bei Fehlersuche Java Basics - Anfänger-Themen 2
B Fehlersuche bei LinkedList Java Basics - Anfänger-Themen 3
w0ddes Array out of Bounds - Fehlersuche Java Basics - Anfänger-Themen 2
? hilfe bei Fehlersuche Sortierung List Java Basics - Anfänger-Themen 5
R Fehlersuche - KeyListener, KeyAdaper - Nichts Klappt! Java Basics - Anfänger-Themen 2
D Zeichen im String ändern -> Fehlersuche Java Basics - Anfänger-Themen 7
S Filereader funktioniert nicht! Fehlersuche Java Basics - Anfänger-Themen 9
S Fehlersuche Java Basics - Anfänger-Themen 6
G Fehlersuche bei einer Rechenoperation Java Basics - Anfänger-Themen 2
G Hilfe bei fehlersuche Java Basics - Anfänger-Themen 3
N Fehlersuche. Tasks Java Basics - Anfänger-Themen 14
D Fehlersuche actionPerformed Java Basics - Anfänger-Themen 6
D Fehlersuche: Jar erstellen Java Basics - Anfänger-Themen 6
B Fehlersuche Java Basics - Anfänger-Themen 4
F Fehlersuche erfolglos Java Basics - Anfänger-Themen 3
F fehlersuche. Java Basics - Anfänger-Themen 13
J Fehlersuche - illegal start of expression Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben