Massagedialog

guguli

Bekanntes Mitglied
Hallo zusammen,

in meiner GUI würde ich gerne in einem Textfield einen Pfad angeben und mit einem Button klick soll zuerst überprüft werden ob dieser Pfad existiert oder nicht.
Dies hab ich so realisiert:
Java:
private void enterPhad(final JPanel addPanel1, final JPanel addPanel2,
			final JPanel addPanel3) {
		addPanel1.add(pfadentryTextField);
		addPanel1.add(findDocumentButton);
		addPanel3.add(pfadDestinationTextField);
		addPanel3.add(saveButton);
		
		findDocumentButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				pfadsavedArray.add(pfadentryTextField.getText());
				beispielpfad = pfadsavedArray.get(0);			
				if(!new File(beispielpfad).exists())
				{
					JOptionPane.showMessageDialog(null, "the entered path does not exist", "Error", JOptionPane.ERROR_MESSAGE);
					pfadsavedArray.remove(0);
					enterPhad(addPanel1, addPanel2, addPanel3);
				}
falls dieser Pfad nicht existiert dann will ich diese Methode nochmal aufrufen um einen anderen pfad einzutippen bis der pfad exitiert.

Aber wenn ich das einma ausführe und das MassageDialog erscheint und ich auf OK klicke dann wird die funktion zuende ausgeführt ohne dass ich die Mögichkeit habe nochmal den botton zum überprüfen des Pfades zu klicken.

Ich hoff ihr habt mein Problem verstanden.

Danke
 

Androbin

Bekanntes Mitglied
Ich glaube, guguli's Problem ist besteht darin, dass die Methode "enterPath(...)" in einer rekursiven Schleife läuft, welche es unmöglich macht, seine/ihre Eingaben zu korrigieren!

:mad:: turtle 8
Das Ziel ist es - soweit ich das richtig verstanden habe - nicht, eine bestimmte Datei anzuwählen, sondern nur, zu überprüfen, ob es eine Datei mit einem bestimmten Pfad gibt!
Lässt sich dies denn vielleicht auch über den JFileChooser abfragen?
 
Zuletzt bearbeitet:

fLooojava

Bekanntes Mitglied
so auf die schnelle...

Ist der Pfad denn direkt auf ein File? Dann könntest du mit
Java:
File f = new File(filePathString);
f.exists();

überprüfen ob dieses File, sprich der Link gültig ist/bereits vorhanden ist.
Falls dir hier f.exists(); ein true zurückliefert steigst du aus der Schleife raus, ansonsten durchläufst du sie nochmal.

Diese Denkweise sollte funktionieren. Was meinen die anderen? :)
 
Zuletzt bearbeitet:

Androbin

Bekanntes Mitglied
fLooojava hat gesagt.:
so auf die schnelle...

Ist der Pfad denn direkt auf ein File? Dann könntest du mit
Java:
File f = new File(filePathString);
f.exists();

überprüfen ob dieses File, sprich der Link gültig ist/bereits vorhanden ist.
Falls dir hier f.exists(); ein true zurückliefert steigst du aus der Schleife raus, ansonsten durchläufst du sie nochmal.

Diese Denkweise sollte funktionieren. Was meinen die anderen? :)

Es scheint dir wohl noch nicht aufgefallen zu sein:
GENAU DAS STEHT IN DEM CODE-BEISPIEL UNTEN
 

fLooojava

Bekanntes Mitglied
Ah, stimmt. Das habe ich wirklich nicht gesehen. Tut mir leid! Was wäre wenn du es mit einer while-Schleife versuchst?

Java:
boolean boolVar;
            boolVar = true;
while(boolVar==true){..... }

In deiner while-Schleife steckt dein Code vom auslesen des Textfeldes und die Überprüfung des Pfades. Wenn der Pfad vorhanden ist setzt du den boolean auf false. Natürlich ist dies nur ein Grundkonzept, sollte so aber realisierbar sein.. VflFreak hat's eh schon angedeutet.
 
Zuletzt bearbeitet:

Joose

Top Contributor
Java:
boolean boolVar;
            boolVar = true;
while(boolVar==true){..... }

Dann natürlich gleich weiter vereinfachen.
Initialisierung auf 1 Zeile schreiben und die Prüfung gegen
Code:
==true
weglassen

Java:
boolean bedingung = true;
while(bedingung) {
   bedingung = existsPfad(.....);
   ......
}
 

turtle

Top Contributor
Mit dem JFileChooser kann der Benutzer nur Dateien/Directories wählen, die bereits existieren, sonst macht ja fc.showOpenDialog auch keinen Sinn.

Beim fc.showSaveDialog ist es natürlich anders, da ja der Benutzer in eine (neue) Datei schreiben möchte;)
 

guguli

Bekanntes Mitglied
Hallo zusammen,

danke erstmal für die Hilfe.

ich kann mit FielChooser nun die gewünschte datei finden. Nun möchte ich den ausgewählten Pfad in einem TextFiel schreiben.
Also nur den Pfad und nicht der Inhalt der File :9
Ich hab das :

Java:
fileChooserButton.addActionListener(new ActionListener() {
			
			public void actionPerformed(ActionEvent arg0) {
				Openfile of = new Openfile();
				
				try{
					of.pickMe();
				}catch(Exception e){
					e.printStackTrace();
				}
				pfadentryTextField.setText(of.file.toString());
			}
		});
Damit kriege ich NullpointerException
Tipps???

THX
 

guguli

Bekanntes Mitglied
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at DataAnalyse.Gui$1.actionPerformed(Gui.java:109)

Zeile 109 ist dann:
Java:
pfadentryTextField.setText(of.file.toString());
 

VfL_Freak

Top Contributor
Moin,

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at DataAnalyse.Gui$1.actionPerformed(Gui.java:109)
Zeile 109 ist dann:
Java:
pfadentryTextField.setText(of.file.toString());
Dann wird entweder pfadentryTextField (was auch immer das genau ist ...) oder of null sein (sprich: vermutlich zwar deklariert, aber nicht initialisiert!!). Nähreres sagt Dirder Debugger !
Wie sieht denn überhaupt die Klasse "Openfile" aus?

Gruß
Klaus
 

Joose

Top Contributor
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at DataAnalyse.Gui$1.actionPerformed(Gui.java:109)

Ok, du weißt die Zeile wo der Fehler passiert und du kennst den Fehler.
Das sollte ausreichen ihn zu beheben.

Solltest du nicht wissen was der Fehler bedeutet: Es wurde versucht auf eine Objekt zuzugreifen, welches nicht initialisiert (sondern "null") ist.
--> Geh mit dem Debugger zur entsprechenden Zeile und kontrolliere welches der Objekte null ist! Überlege warum das so ist, und baue deinen Code entsprechend um.

of null sein (sprich: vermutlich zwar deklariert, aber nicht initialisiert!!).

Code:
of
wird kurz davor initialisiert, wenn kann
Code:
of.file
den Fehler verursachen. ;)
 
Zuletzt bearbeitet:

guguli

Bekanntes Mitglied
Openfile sieht wie folgt aus:
Java:
public class Openfile {

	JFileChooser fileChooser = new JFileChooser();
	File file = fileChooser.getSelectedFile();
	String stringfile;
	public void pickMe() throws Exception{
		
		if (fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){
			File file = fileChooser.getSelectedFile();
			stringfile = file.getSelecedFile();


		}
	}
}
ich will das zwar so machen aber die Methode getSelectedFile() ist irgendwie nicht verfügbar... :(

Ich vermute das Objekt file leer ist. weiss allerdings nicht wie ich das ändern soll.

Und pfadentryTextField ist ein JTextField objekt.


danke
 
Zuletzt bearbeitet:

Joose

Top Contributor
Ja der Code ist etwas sehr wirr .... einerseits frage ich mich wozu dient diese Klasse? Einfach nur um einen JFileChooser anzuzeigen? Dafür wäre vl eine static Methode besser geeignet als so eine "Util"-Klasse.

Java:
public class Openfile {

	JFileChooser fileChooser = new JFileChooser();
	File file = fileChooser.getSelectedFile();

Du bist hier bei den Instanzvariablen, daher bringt sich der Aufruf von
Code:
getSelectedFile
hier nichts.
Dein JFileChooser wurde noch nicht angezeigt, und kann daher nur
Code:
null
zurückgeben!

Java:
		if (fileChooser.showOpenDialog(null)==JFileChooser.APPROVE_OPTION){
			File file = fileChooser.getSelectedFile();
			stringfile = file.getSelecedFile();
ich will das zwar so machen aber die Methode getSelectedFile() ist irgendwie nicht verfügbar... :(

Entferne bei
Code:
File file
den Typ um auf die Instanzvariable zuzugreifen und nicht eine lokale Variable zu verwenden!
Code:
stringfile = file.getSelectedFile();
.. die Klasse
Code:
File
bietet keine Methode an die so heißt.

Ich vermute das Objekt file leer ist. weiss allerdings nicht wie ich das ändern soll.

Ja, anhand diese Code ist das klar!
Du definierst ein Klassenattribut
Code:
file
und in der Methode
Code:
pickMe()
ein lokales Attribut
Code:
file
 
Zuletzt bearbeitet:

Oben