Swingworker und Rekursion

Weiti

Mitglied
hallo, ich habe benutze neuerdings den Swingworker in Verbindung mit einer Progressbar.
Ich bekomme allerdings Fehler und frage mich ob das an der Rekursion liegt. Erstmal vereinfacht in Pseudocode was ich tue:

[Java]
public class ListIt extends SwingWorker<Object, Object>
{
@Override
protected Object doInBackground() throws Exception {
StartListing();
return null;
}

@Override
protected void done()
{

if(Exe.theAppWindow.mode==Full)
{
Exe.theAppWindow.runFullmodeOP();
}
Exe.theAppWindow.makeLog();
Exe.theAppWindow.saveSettings();
Exe.theAppWindow.ready();

}
StartListing()
{
//irrelevant
findEPG();

}

findEPG(param_0)
{
//irrelevant
for i:
find EPG(param_i) //rekursion!!
}

//Andere methoden


}
[/code]

Java:
Klasse 2

main()
{
  Lister=new ListIt
   Lister.execute();

}

//Andere methoden

und der Fehler:
Code:
java.lang.NullPointerExceptionnehme Verzeichnis:C:\Users\Weiti\workspace\NotenListe

	at ListIt.find_EPG_2(ListIt.java:160)
	at ListIt.find_EPG(ListIt.java:137)
	at ListIt.StartListing(ListIt.java:103)
	at ListIt.doInBackground(ListIt.java:343)
	at javax.swing.SwingWorker$1.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at javax.swing.SwingWorker.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
	at ListIt.find_EPG_2(ListIt.java:160)
	at ListIt.find_EPG(ListIt.java:137)
	at ListIt.StartListing(ListIt.java:103)
	at ListIt.doInBackground(ListIt.java:343)
	at javax.swing.SwingWorker$1.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at javax.swing.SwingWorker.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
--Fehler! Ordner/Pfad richtig? (findEPG-2)
und so weiter, je nach Anzahl Ordner werden es mehr und mehr
 

faetzminator

Gesperrter Benutzer
In ListIt.java auf Zeile 160 wurde eine Variable nicht initialisiert, ist also [c]null[/c]. Darum wird dort eine [c]NullPointerException[/c] geworfen. Dieser Code ist allerdings sicher nicht valid.
 

Weiti

Mitglied
[Java]
public void find_EPG_2(String path)
{
try{
File f = new File(path);
File [] files = f.listFiles();
f.getAbsolutePath();

-->Zeile 160: for (int i=0; i< files.length; i++) {

if (files.isDirectory()) {
find_EPG_2(files.toString());
System.out.println(files.toString()+" - Ist ein Ordner");
log=log+files.toString()+" - Ist ein Ordner"+lsep;
} else {
if (files.toString().endsWith("EPG.txt") || files.toString().endsWith("info.vdr")) {
System.out.print(files.toString()+" - Ist EPG, lese aus");
log=log+files.toString()+" - Ist EPG, lese aus";
read(files.toString());

}
}
}
} catch (Exception e){
e.printStackTrace();
Exe.theAppWindow.error=true;
Exe.theAppWindow.label_status.setText("Fehler : Ordner/Pfad richtig? (findEPG-2)");
System.out.println("--Fehler! Ordner/Pfad richtig? (findEPG-2)");
log=log+"--Fehler! Ordner/Pfad richtig? (findEPG-2)"+lsep;
errors++;

}
}
[/Java]

Da ist alles initialisiert!?

in path steht im am Anfang der Methode " C:\Users\Weiti\workspace\NotenListe\src\images "

was heißt valid?

Der Progressbar zeigt alles richtig an. (Wird übrigens in findEPG aktualisiert )
 

eRaaaa

Top Contributor
erinnert mich doch sehr an den Thread hier :lol:

--> File (Java Platform SE 6) listFiles()
Returns null if this abstract pathname does not denote a directory, or if an I/O error occurs.

Überprüfe also mal dein "f" / "path" :D

EDIT:
in path steht im am Anfang der Methode " C:\Users\Weiti\workspace\NotenListe\src\images "
Wenn da wirklich auch die Leerzeichen enthalten sind, haste schon einen Übeltäter ...
btw: Wieso benutzt du nicht einfach immer das File-Objekt anstelle unhandlich mit Strings hin und her...
 
Zuletzt bearbeitet:

Weiti

Mitglied
C:\Users\Weiti\workspace\NotenListe\src\images - Ist ein Ordner

erkennt er ja auch.
Der String lautet:

Code:
C:\Users\Weiti\workspace\NotenListe\src

ohne " " und ohne Leerzeichen. Das war nur zum zitieren der Ausgabe.
Vor dem Swingworker ging es ja auch.

Hier die alte version, mit Gui aber ohne Swingworker:

weiti.tk --> ListIt --> ListIt.java
 

eRaaaa

Top Contributor
Naja, aber scheint ja trotzdem so, dass "files" irgendwann null ist und da du anscheinend keine Lust auf debugging hast *g* könntest du ja zumindest mal einige SYSOS einfügen um nachzuvollziehen was genau schief läuft, z.B. mal nach Zeile (hier 4) mal so etwas wie
Java:
	if(!f.exists()){
	    System.out.println(f);
	}
oder wie auch immer...
(oder mal entsprechende catch-Blöcke!!!)

Aber naja...:autsch:
 

Weiti

Mitglied
Java:
public void find_EPG_2(File f)
	{
		if(!f.exists()){
	        System.out.println("file:"+f);
	    }
		try{		
			File [] files = f.listFiles();
			//f.getAbsolutePath();
			System.out.println("filearray angelegt von "+f);
			for (int i=0; i< files.length; i++) {

				if (files[i].isDirectory()) {
					find_EPG_2(files[i]);	
					System.out.println(files[i].toString()+" - Ist ein Ordner");
					log=log+files[i].toString()+" - Ist ein Ordner"+lsep;
				} else {
					if (files[i].toString().endsWith("EPG.txt") || files[i].toString().endsWith("info.vdr")) {
						System.out.print(files[i].toString()+" - Ist EPG, lese aus");
						log=log+files[i].toString()+" - Ist EPG, lese aus";
						read(files[i].toString());
						
					}
				}
			}
		} catch (Exception e){
			e.printStackTrace();
			Exe.theAppWindow.error=true;
			Exe.theAppWindow.label_status.setText("Fehler : Ordner/Pfad richtig? (findEPG-2)");
			System.out.println("--Fehler! Ordner/Pfad richtig? (findEPG-2)"+f);
			log=log+"--Fehler! Ordner/Pfad richtig? (findEPG-2)"+lsep;
			errors++;
			
		}
	}

Code:
--C:\Users\Weiti\ListIt
nehme Verzeichnis:C:\Users\Weiti\workspace\NotenListe
java.lang.NullPointerException
	at ListIt.find_EPG_2(ListIt.java:163)
	at ListIt.find_EPG(ListIt.java:137)
	at ListIt.StartListing(ListIt.java:103)
	at ListIt.doInBackground(ListIt.java:346)
	at javax.swing.SwingWorker$1.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at javax.swing.SwingWorker.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
	at ListIt.find_EPG_2(ListIt.java:163)
	at ListIt.find_EPG(ListIt.java:137)
	at ListIt.StartListing(ListIt.java:103)
	at ListIt.doInBackground(ListIt.java:346)
	at javax.swing.SwingWorker$1.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at javax.swing.SwingWorker.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)filearray angelegt von C:\Users\Weiti\workspace\NotenListe\.classpath
--Fehler! Ordner/Pfad richtig? (findEPG-2)C:\Users\Weiti\workspace\NotenListe\.classpath
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\.project

	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
	at ListIt.find_EPG_2(ListIt.java:163)
	at ListIt.find_EPG(ListIt.java:137)
	at ListIt.StartListing(ListIt.java:103)
	at ListIt.doInBackground(ListIt.java:346)
	at javax.swing.SwingWorker$1.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at javax.swing.SwingWorker.run(Unknown Source)--Fehler! Ordner/Pfad richtig? (findEPG-2)C:\Users\Weiti\workspace\NotenListe\.project
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\.settings
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\bin
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\bin\images
C:\Users\Weiti\workspace\NotenListe\bin\images - Ist ein Ordner
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\ListIt_Liste.csv
--Fehler! Ordner/Pfad richtig? (findEPG-2)C:\Users\Weiti\workspace\NotenListe\ListIt_Liste.csv
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\ListIt_log.txt

	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException
	at ListIt.find_EPG_2(ListIt.java:163)
	at ListIt.find_EPG(ListIt.java:137)
	at ListIt.StartListing(ListIt.java:103)
	at ListIt.doInBackground(ListIt.java:346)
	at javax.swing.SwingWorker$1.call(Unknown Source)
	at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
	at java.util.concurrent.FutureTask.run(Unknown Source)
	at javax.swing.SwingWorker.run(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
--Fehler! Ordner/Pfad richtig? (findEPG-2)C:\Users\Weiti\workspace\NotenListe\ListIt_log.txt
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\src
filearray angelegt von C:\Users\Weiti\workspace\NotenListe\src\images
C:\Users\Weiti\workspace\NotenListe\src\images - Ist ein Ordner


Es geht nur bei bestimmten Ordnern / Dateien nicht geht, ich kann aber kein Muster erkennen.
Auffällig ist, das in der Ausgabe nirgendwo ein file:xyz kommt trotz des print()

edit: in anderen Ordnern läuft es fehlerfrei durch. im filme Ordner (wo es drauf ankommt) nicht, obwohl dort alle Ordner den gleichen Aufbau haben.

edit2: sorry, habs eben erst gesehen. !file mit file ersetzt im if
 
Zuletzt bearbeitet:

Weiti

Mitglied
habs: nach ewigem suchen: ich versuche mehrmals eine listfiles() auf eine nicht-Ordner Datei anzuwenden.
gelöst mit:
Java:
public void find_EPG_2(File f)
	{
		if(f.exists() && f.isDirectory()){
	        System.out.println("file:"+f);
	    
			try{		
				File [] files = f.listFiles();
				//f.getAbsolutePath();
				System.out.println("filearray angelegt von "+f);
				for (int i=0; i< files.length; i++) {
	
					if (files[i].isDirectory()) {
						find_EPG_2(files[i]);	
						System.out.println(files[i].toString()+" - Ist ein Ordner");
						log=log+files[i].toString()+" - Ist ein Ordner"+lsep;
					} else {
						if (files[i].toString().endsWith("EPG.txt") || files[i].toString().endsWith("info.vdr")) {
							System.out.print(files[i].toString()+" - Ist EPG, lese aus");
							log=log+files[i].toString()+" - Ist EPG, lese aus";
							read(files[i].toString());
							
						}
					}
				}
			} catch (Exception e){
				e.printStackTrace();
				Exe.theAppWindow.error=true;
				Exe.theAppWindow.label_status.setText("Fehler : Ordner/Pfad richtig? (findEPG-2)");
				System.out.println("--Fehler! Ordner/Pfad richtig? (findEPG-2)"+f);
				log=log+"--Fehler! Ordner/Pfad richtig? (findEPG-2)"+lsep;
				errors++;
				
			}
		}
	}

danke an alle, ich weiß nun wenigstens das es nicht an der Rekursion lag, sondern an eigener Dusseligkeit.
 

Weiti

Mitglied
Hallo nochmal. Das war leider nicht das Problem, obwohl es einige Fehler weniger gab.
Ich habe herausgefunden das es an einigen Stellen am Leerzeichen im Ordnernamen liegt.

Folgender Code:

Java:
	public void find_EPG_2(File f)
	{
		if(f.exists() && f.isDirectory()){
	        System.out.println("file:"+f);
	    
			try{		
				File [] files = f.listFiles();
				//f.getAbsolutePath();
				System.out.println("filearray angelegt von "+f);
				if(f.length()>0)
				{
						
					for (int i=0; i< files.length; i++) {
		
						if (files[i].isDirectory()) {
							find_EPG_2(files[i]);	
							System.out.println(files[i].toString()+" - Ist ein Ordner");
							log=log+files[i].toString()+" - Ist ein Ordner"+lsep;
						} else {
							if (files[i].toString().endsWith("EPG.txt") || files[i].toString().endsWith("info.vdr")) {
								System.out.print(files[i].toString()+" - Ist EPG, lese aus");
								log=log+files[i].toString()+" - Ist EPG, lese aus";
								read(files[i]);
								
							}
						}
					}
				}
				else
					System.out.println("file: "+f+" hat leere listfiles()-array");
			} 
			catch (Exception e)
			{
				error(e,"Fehler : Ordner/Pfad richtig? (findEPG2)",true);
			}
		}
	}

gibt aus:

Code:
file:C:\Users\Weiti\Documents\Red Alert 3
filearray angelegt von C:\Users\Weiti\Documents\Red Alert 3
file: C:\Users\Weiti\Documents\Red Alert 3 hat leere listfiles()-array

allerdings hat der Ordner noch einen Unterordner. also müsste files.length() gleich 1 sein

Kann die listfiles() Methode Leerzeichen-sicher gemacht werden?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Thallius Alternative für SwingWorker Allgemeine Java-Themen 5
Thallius Merkwürdiges Verhalten von Swingworker.cancel() Allgemeine Java-Themen 2
C SwingWorker.cancle(true) tötet alle Worker Allgemeine Java-Themen 3
U SwingWorker und Exception Allgemeine Java-Themen 3
martin82 Java Runtime Update >17 - SwingWorker Änderungen? Allgemeine Java-Themen 7
H SwingWorker statt Thread für einen Server Allgemeine Java-Themen 2
D SwingWorker, was ist richtig? Allgemeine Java-Themen 2
T SwingWorker mit mp3 Datei? Allgemeine Java-Themen 5
P Rekursion Aufrufbaum Allgemeine Java-Themen 7
N rekursion mehrfach eine Methode Öffnen Allgemeine Java-Themen 4
districon Rekursion und Dynamische Programmierung Allgemeine Java-Themen 2
Zeppi Rekursion StackOverflowError Allgemeine Java-Themen 4
J Rekursion Allgemeine Java-Themen 4
Zrebna Wie kann man endgültig aus einer Rekursion ausbrechen? Allgemeine Java-Themen 14
parrot Rekursion Aufgabe Allgemeine Java-Themen 12
B Rekursion Allgemeine Java-Themen 11
X Wie mache ich hier eine Rekursion rein ? Allgemeine Java-Themen 7
J Rekursion Mergesort Allgemeine Java-Themen 10
R Rekursion Allgemeine Java-Themen 3
R Programm zur Rekursion Allgemeine Java-Themen 5
V Rekursion Allgemeine Java-Themen 2
J Denkfehler Rekursion Allgemeine Java-Themen 5
I Raute mit Rekursion "zeichnen" Allgemeine Java-Themen 7
B Rekursion Allgemeine Java-Themen 2
B Rekursion Allgemeine Java-Themen 22
B Java Sternchen ausgeben mittels Rekursion Allgemeine Java-Themen 3
Hacer Rekursion- sumOfAllNodes Allgemeine Java-Themen 5
L Rekursion Binärbaum Allgemeine Java-Themen 7
Androbin Interpreter-Fehler Probleme mit Rekursion - StackOverflowError Allgemeine Java-Themen 8
Y Rekursion Allgemeine Java-Themen 19
M Permutation ohne Wiederholung mit rekursion Allgemeine Java-Themen 4
J Rekursion oder Iteration - verkettete Listen Allgemeine Java-Themen 8
T Pascalsches Dreieck ohne array und rekursion Allgemeine Java-Themen 9
P Rekursion Allgemeine Java-Themen 9
R Threading und Rekursion führen zu “GC overhead limit exceeded” Allgemeine Java-Themen 4
W Rekursion-Probleme mit return Allgemeine Java-Themen 35
C Rekursion Fibonacci Allgemeine Java-Themen 31
T Rekursion mit While Schleife kombinieren? Allgemeine Java-Themen 4
eQuest Rekursion Dauer Allgemeine Java-Themen 6
L fragwürdige Rekursion Allgemeine Java-Themen 4
L Kleine Rekursion Allgemeine Java-Themen 12
M Rekursion!! Allgemeine Java-Themen 8
J Rekursion in Schleifenkonstrukt wandeln Allgemeine Java-Themen 21
R Rekursion Ablauflogik Allgemeine Java-Themen 19
M Rückwärts geführte Rekursion Allgemeine Java-Themen 3
Schandro StackOverflowError bei Rekursion verhindern Allgemeine Java-Themen 14
G Werte bei Rekursion viel höher als erwartet Allgemeine Java-Themen 3
G Rekursion - Denksport Allgemeine Java-Themen 6
S Rekursion und StackOverflow Allgemeine Java-Themen 11
P Stackoverflow in Rekursion. Bin ich schuld oder Java? Allgemeine Java-Themen 9
W kompliziertes Konstrukt von Schleifen/If/else. Rekursion? Allgemeine Java-Themen 22
S Rekursion Allgemeine Java-Themen 2
Linad Tiefe der Rekursion als Abbruchbedingung Allgemeine Java-Themen 6
Linad Zahlensysteme -> Rekursion Allgemeine Java-Themen 4
N Frage zu einer Rekursion Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben