unverständliche exception

Status
Nicht offen für weitere Antworten.

darkeye2

Bekanntes Mitglied
Tach, arbeite an einem prog, dass in einen komplexen ordnersystem nach bestimmten files suchen soll, und nun krige ich gleich mehrere fehler, die ich in dem zusammenhang nicht verstehe, hier der Queltext:

Java:
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.util.StringTokenizer;

import javax.swing.*;

public class TestSuFu extends JFrame{
	
	String[] rootDirectories;
	JTextField LB = new JTextField(4);
	JTextArea tabel = new JTextArea();
	JTextField searcher = new JTextField(20);
	String[] suwords;
	File driveC;
	
	TestSuFu(){
		super();
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setTitle("Wuala SuFu");
		this.setResizable(false);
		
		JPanel setings = new JPanel();
		JPanel tabelle = new JPanel();
		JButton setter = new JButton("Set");
		JButton search = new JButton("Suchen");
		search.addActionListener(new SearchEvent());
		JLabel such = new JLabel("Suchbegriff:");
		JScrollPane scrolls = new JScrollPane(tabel);
		
		setter.addActionListener(new SetEvent());

		setings.setSize(380, 50);
		setings.add(new JLabel("Wuala Laufwerksbuchstabe:"));
		setings.add(LB);
		setings.add(setter);
		
		tabelle.add(such);
		tabelle.add(searcher);
		tabelle.add(search);
		tabelle.add(scrolls);
		
		this.add(setings);
		this.add(tabelle);
		this.pack();
		this.setSize(400, 300);
		searcher.setSize(300, 45);
		LB.setSize(100, 45);
		tabelle.setSize(350, 200);
		tabel.setPreferredSize(new Dimension(200, 150));
		scrolls.setSize(390, 200);
		this.setVisible(true);
		
		
		
	}
	
	class SearchEvent implements ActionListener{

		public void actionPerformed(ActionEvent n){
			StringTokenizer st = new  StringTokenizer(searcher.getText());
			suwords = new String[st.countTokens()];
			for(int nt = 0; nt < rootDirectories.length; nt++){
				new suchTh(rootDirectories[nt]);
			}

		  }
			
		}
	
	void treeWalk(File file) {
 		if (file.isDirectory()) {
 			File[] children = file.listFiles();
 			for (int i = 0; i < children.length; i++) {
 				treeWalk(children[i]);
 			}
 		} else {
 			for(int t = 0; t < suwords.length; t++){
 				System.out.println(file.getName());
 			if(file.getName().contains(suwords[t])){
 				tabel.setText(tabel.getText() + file.getAbsolutePath());
 				
 			}
 			}
 		}
 	}
	
	
	class suchTh extends Thread {
		public String wort;
		
		public suchTh(String worter){
			this.wort = worter;
			this.start();
		}
		
		public void run()
		  {
			File newfile = new File(driveC + "\\" + wort + "\\");
			treeWalk(newfile);
		  }
		}
		
	
	
	class SetEvent implements ActionListener{

		public void actionPerformed(ActionEvent c){
			driveC = new File(LB.getText() + ":\\mygroups\\");
			rootDirectories = driveC.list();
		  }
			
		}
	

	
	public static void main(String[] args) throws Exception {
		new TestSuFu();

 
 	}
 
 	
 }

da teilweise viele daten drin sind, und es ewig daurn würde, mit einem thread alles zu durchsuchen, wird für jeden großen überordner (sind etwa 30 - 40) ein thread erstellt, der suchen soll.

so sieht der fehler für jeden thread aus, der erstellt wird:
Java:
Exception in thread "Thread-6" Exception in thread "Thread-18" java.lang.NullPointerException
	at java.lang.String.contains(Unknown Source)
	at de.spsb.irc.v1_0.TestSuFu.treeWalk(TestSuFu.java:85)
	at de.spsb.irc.v1_0.TestSuFu.treeWalk(TestSuFu.java:80)
	at de.spsb.irc.v1_0.TestSuFu.treeWalk(TestSuFu.java:80)
	at de.spsb.irc.v1_0.TestSuFu$suchTh.run(TestSuFu.java:105)
 

darkeye2

Bekanntes Mitglied
danke für die hilfe, hattest recht, aber scheinbar stimmt noch irgendwas nicht, es wird zwar kein fehler mehr angezeigt, aber es werden bei weitem nicht alle dateien angezeigt, die eigentlich angezeigt werden sollten.

Kann es sein, das bei der contains methode die groß-/ kleinschreibung eine rolle spilet?
 
M

maki

Gast
Natürlich, "JAVA" ist ja etwas anderes als "Java" oder "java".
 

darkeye2

Bekanntes Mitglied
wie würde sich das hier am besten verhindern lassen? finde bei der contains methode sowas wie ignorecase nicht.
 
S

Spacerat

Gast
wie würde sich das hier am besten verhindern lassen? finde bei der contains methode sowas wie ignorecase nicht.
Vllt. hilft ja "<String>.matches()" weiter. Aus den Suchbegriffen müssten dann aber reguläre Ausdrücke (bzw. ein regulärer Ausdruck) werden. Ich selbst hab' mich aber noch nicht mit befasst. Das ist deswegen nur so 'ne Idee.
 
G

Gastredner

Gast
Java:
if(file.getName().toLowerCase().contains(suwords[t].toLowerCase())){
      tabel.setText(tabel.getText() + file.getAbsolutePath());
                
}
 

darkeye2

Bekanntes Mitglied
danke, habs jetzt mit toLowerCase gemacht, aber nach den 7 stunden arbeit denke ich langsamm, ich gehe die sache völlig falsch an...

Problem:
in etwa 30 - maximal 70 überordnern befinden sich sehr viele weitere unterordner und daten (ca. 300tb daten in vielen tausenden ordnern untergebracht. nun will ich da schnell etwas finden können, schnell heißt innerhalb von 3-4 min, schneller wäre optimal.

Idee:
ich erstelle für jeden der überordner einen eigenen thread der eben für seine unterordner verantwortlich ist. es soll immer der vollständige pfad zu einem ordner oder einer datei ausgegeben werden, die im namen den suchbegriff enthält, oder einen teil des suchbegriffs.

Queltext:
Gui:
Java:
TestSuFu(){
		super();
		this.setLayout(new FlowLayout());
		this.setDefaultCloseOperation(EXIT_ON_CLOSE);
		this.setTitle("Wuala SuFu");
		this.setResizable(false);
		
		JPanel setings = new JPanel();
		JPanel tabelle = new JPanel();
		JButton setter = new JButton("Set");
		JButton search = new JButton("Suchen");
		search.addActionListener(new SearchEvent());
		JLabel such = new JLabel("Suchbegriff:");
		JScrollPane scrolls = new JScrollPane(tabel);
		
		setter.addActionListener(new SetEvent());

		setings.setSize(380, 50);
		setings.add(new JLabel("Laufwerksbuchstabe:"));
		setings.add(LB);
		setings.add(setter);
		
		tabelle.add(such);
		tabelle.add(searcher);
		tabelle.add(search);
		tabelle.add(scrolls);
		
		this.add(setings);
		this.add(tabelle);
		this.pack();
		this.setSize(400, 300);
		searcher.setSize(300, 45);
		LB.setSize(100, 45);
		tabelle.setSize(350, 200);
		tabel.setPreferredSize(new Dimension(200, 150));
		scrolls.setSize(390, 200);
		this.setVisible(true);
Set Button (laufwerksbezeichner und datenpfad in variablen speichern):
Java:
class SetEvent implements ActionListener{

		public void actionPerformed(ActionEvent c){
			driveC = new File(LB.getText() + ":\\mygroups\\");
			rootDirectories = driveC.list();
		  }
			
		}
klick auf button suchen (suchbegriff in einzelne wörter zerlegen und für jeden überordner einen suchthread starten):
Java:
class SearchEvent implements ActionListener{

		public void actionPerformed(ActionEvent n){
			StringTokenizer st = new  StringTokenizer(searcher.getText());
			suwords = new String[st.countTokens()];
			int m = 0;
			while(st.hasMoreElements()){
				suwords[m] = (String) st.nextElement();
				m++;
				
			}
			for(int nt = 0; nt < rootDirectories.length; nt++){
				new suchTh(driveC + "\\" + rootDirectories[nt] + "\\");
			}

		  }
			
		}
Der Suchthread (starten der suchfunktion für diesen thread , für den jeweiligen überordner):
Java:
class suchTh extends Thread {
		public String wort;
		
		public suchTh(String worter){
			this.wort = worter;
			this.start();
		}
		
		public void run()
		  {
			File newfile = new File(wort);
			treeWalk(newfile);
		  }
		}
Suchfunktion:
Java:
void treeWalk(File file) {
 		if (file.isDirectory()) {
 			
 			for(int st = 0; st < suwords.length; st++){
 	 			if(file.getName().toLowerCase().contains(suwords[st].toLowerCase())){
 	 				tabel.setText(tabel.getText() + file.getAbsolutePath());
 	 			}
 			}
 			
 			String  abpf = new String(file.getAbsolutePath());
 			File[] children = file.listFiles();
 			for (int i = 0; i < children.length; i++) {
 				treeWalk(children[i]);
 			}
 		} else {
 			for(int t = 0; t < suwords.length; t++){
 			if(file.getName().toLowerCase().contains(suwords[t].toLowerCase())){
 				tabel.setText(tabel.getText() + file.getAbsolutePath());
 				
 			}
 			}
 		}
 	}

Was könnte ich falsch gemacht haben, oder was könnte / sollte ich anders machen (inzwischen kriege ich kein einziges suchergebniss)
 

madboy

Top Contributor
Ich vermute, dass mehrere Threads die Sache nicht beschleunigen werden und nur dein Programm komplexer machen.
Grund: der limitierende Faktor wird nicht die Prozessorauslastung sein sondern der Zugriff auf die Festplatte. Die wird schon mit einem Thread zu 100% ausgelastet.

Wenn du regelmäßig etwas in 300 TB suchen willst, solltest du evtl. die Daten indizieren lassen. Unter Linux/Unix mittels updatedb/locate oder unter Java: Apache Lucene - Overview

EDIT: irgendwie hab ich da was durcheinander gebracht. Du willst ja keine Dateien indizieren sondern danach suchen und dein Vorhaben sieht auch nach Windows aus :)
 
Zuletzt bearbeitet:

darkeye2

Bekanntes Mitglied
im grunde hab ich zwar windows grad auf meinen rechner, aber das prog sollte nach möglichkeit auch unter linux laufen. die festplatte, ist eigentlich ein server, der über eine virtuelle festplatte mit meinem rechner verknüpft ist, das heißt die daten sind nicht auf meinen rechner, sondern auf einen server außerhalb, (linuxserver) doch der einzigste zugriff, denn ich auf dem server habe, ist eben der über die virtuelle festplatte.

ich habe durchaus schon mal drüber nachgedacht, ob ich mir ein prog erstelle, dass mir dateinamen und absoluten pfad in einer mysql db abspeichert (auf einen anderen server) aber dachte mir, da ständig ordner und daten dazukommen, müsste man das ständig aktualisieren und ich vermute mal, wenn suchen so lange dauert, würde auch das eintragen genau so lang daueren.

Noch eine frage, wie kriege ich es hin, das nach jedem eintrg, in mein jtextarea automatisch ein zeilenumbruch gemacht wird? hab gehört man soll einfach sowas in den text einfügen: /n , aber scheint net zu klappen, dann hab ich sowas als ausgabe:
eingabe1 = "a";
eingabe2 = "b";
area.setText (eingabe1 + "/n" + eingabe2);
ausgabe: a/nb
 
Zuletzt bearbeitet:

darkeye2

Bekanntes Mitglied
achso, danke jetzt klappts, gibts eigentlich eine möglichkeit, alle vom programm gestarteten threads zu beenden? mein prog startet ja für jeden überordner einen thread, und ich kenne somit die namen der threads net.
Nun wurde vielleicht schon gefunden, wonach ich suche, und ich würde gern die restliche suche abbrechen also alle sucht threads killen, ist sowas möglich?
 
S

Spacerat

Gast
Selber implementieren könnte bei derartigen Sachen schon viel zu umständlich sein. Schau dir mal das "java.util.concurrent"-API an.
 

darkeye2

Bekanntes Mitglied
hmm, bin grad net ganz sicher, ob es das richtige ist, hab die classe ThreadPoolExecutor gefunden, klingt interessant, aber verstehe net ganz, wie genau das funktioniert.

Hab jetzt noch eine möglichkeit gefunden, ich speichere beim aufrufen der threads die namen in einem string array, wie kann ich danach mit dem namen den thread aufrufen um den befehl stop(); zu übergeben?
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Vllt. reicht es ja, die einzelnen Threads, einer Liste ("List<Thread>") (besser einem Set "Set<Thread>") hinzuzufügen. Falls ein Thread den status "gefunden" meldet, muss nur noch über diese Liste iteriert werden um die restlichen Threads zu stoppen.
 

darkeye2

Bekanntes Mitglied
so, habs jetzt so gelöst, dass ich ein thread array anlege, und über dieses dann alle threads beende, noch eine frage habe ich allerdings, ich möchte abfragen, ob noch threads laufen (oder bereits von alleine beendet wurden) deswegen will ich per schleife zählen lassen, wie viele threads noch bei getState() runnable ausgeben und die anzahl dann ausgeben. Allerdings kann man scheinbar nicht einfach so vergleichen:
if (threadS.getState() == "RUNNABLE"){}
Wie kann ich das abfragen, ob state noch runable ist?
 

darkeye2

Bekanntes Mitglied
danke für deine hilfe, werde erstmal bei meinem selbstgebastelten bleiben, aber schaue mir die links auch mal an. Funktioniert jetz soweit, mal schauen, wie lange es dauert, bis ich wieder eure hilfe brauche^^
 

darkeye2

Bekanntes Mitglied
Hallo, hab jetzt wieder ne frage^^

also es funktioniert alles soweit, nicht perfekt aber es geht, nun möcht ich es allerdings so machen, dass man beim markieren der ausgegebenen links, die etwa so aussehen :
X:\\Start\linksammlung\php\php5.pdf
oder einfach so:
X:\\Start\linksammlung\php
und klicken auf nem butten der link in einen speziellen prog geöffnet wird, das heißt, mir reicht es nicht, den standartbrowser mit link aufzurufen, sondern ich möchte ein prog wählen, mit dem der link geöffnet werden soll... ist etwas kompliziert das zu erklären, so wie ich bei textdateien den editor auswählen kann, will ich hier den link mit einem spezielen prog öffnen, wie könnte ich das umsetzen?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
nbergmann Unverständliche Fehlermeldung Java Basics - Anfänger-Themen 56
M unverständliche Laufzeitunterschiede Java Basics - Anfänger-Themen 3
I Exception wird gefangen, aber trotzdem in Error Log? Java Basics - Anfänger-Themen 10
W Null-Pointer Exception beim Programmstart Java Basics - Anfänger-Themen 8
Ostkreuz String Exception Java Basics - Anfänger-Themen 8
Fiedelbambu Exception in Application constructor Java Basics - Anfänger-Themen 3
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
F abbruch Exception lässt sich nicht erstellen Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception beim Verwenden von Arraylist? Java Basics - Anfänger-Themen 10
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
S JavaKara Null Exception Error Java Basics - Anfänger-Themen 4
T Eigene Exception - ohne werfen abfangen Java Basics - Anfänger-Themen 2
LiFunk Exception: es dürfen nur Nummern eingelesen werden Java Basics - Anfänger-Themen 6
low_in_the_head Eigene Exception nutzen Java Basics - Anfänger-Themen 4
1 Exception Java Basics - Anfänger-Themen 2
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
I JAX-RS Exception Handling Java Basics - Anfänger-Themen 4
L Meine erste eigene Exception Klasse Java Basics - Anfänger-Themen 10
J null exception Array Java Basics - Anfänger-Themen 5
H Frage zu Throw Exception Java Basics - Anfänger-Themen 2
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
M Wie kann ich bei int-Variablen im exception handler auf bestimmte Strings reagieren? Java Basics - Anfänger-Themen 5
C Exception-Frage Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
I Exception bei Button mit wait() und notifyAll() Java Basics - Anfänger-Themen 3
N Wie teste ich eine geworfene Exception? Java Basics - Anfänger-Themen 8
R Methoden ArrayList clonen wirft exception Java Basics - Anfänger-Themen 3
D Scanner- Exception NoSuchElementException Java Basics - Anfänger-Themen 2
N Exception werfen bei falscher Datumseingabe Java Basics - Anfänger-Themen 14
A Exception handeling mit finally und objektreferenzen Java Basics - Anfänger-Themen 6
D Frage zu Strings einer Exception Java Basics - Anfänger-Themen 4
S Exception Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
S Verwenden von throw Exception an der Funktion Java Basics - Anfänger-Themen 2
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
Z Fragen zu Exception (Throws/throw) Java Basics - Anfänger-Themen 7
OSchriever Exception für Abbrechen-Schaltfläche JOptionpane Java Basics - Anfänger-Themen 9
J Dateien in Verzeichnissen rekursiv auflisten wirft Exception Java Basics - Anfänger-Themen 4
J Exception unreachable Java Basics - Anfänger-Themen 12
O unchecked Exception Java Basics - Anfänger-Themen 4
P Exception werfen Java Basics - Anfänger-Themen 15
B EJB und Arquillian - bekomme Nullpointer Exception beim Aufruf der EJB Klasse Java Basics - Anfänger-Themen 40
S Exception bei Verwendung von LocalDate Java Basics - Anfänger-Themen 19
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
D Warum die Nullpointer Exception Java Basics - Anfänger-Themen 6
O Exception behandlung einfach Ueben mit Fakt! Java Basics - Anfänger-Themen 10
I OOP Was ist die "Exception Hierarchie" ? Java Basics - Anfänger-Themen 3
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
G Exception und Ausgabe der Duplikate Java Basics - Anfänger-Themen 6
H Try Catch Throw Exception Java Basics - Anfänger-Themen 1
W Exception in Main abfangen oder in der Methode? Java Basics - Anfänger-Themen 10
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
Mosquera Exception Java Basics - Anfänger-Themen 5
M rekursive division/0 mit exception Java Basics - Anfänger-Themen 18
N Nullpointer exception Java Basics - Anfänger-Themen 4
L Eigene Exception schreiben bei zu langem Array Java Basics - Anfänger-Themen 10
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
S Array Grenzen-Exception Java Basics - Anfänger-Themen 11
E InputStream im Servlet wirft Exception Java Basics - Anfänger-Themen 5
D Erste Schritte Java.lang.NullPointer.Exception Java Basics - Anfänger-Themen 8
G Arrays out of Bounds exception Java Basics - Anfänger-Themen 2
H Compiler-Fehler Out of Bunce Exception bei einem Char Java Basics - Anfänger-Themen 6
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
C Null Pointer Exception Java Basics - Anfänger-Themen 10
F Klassen Eigene Exception Bedingungen festlegen Java Basics - Anfänger-Themen 2
G Null Pointer Exception Java Basics - Anfänger-Themen 4
GreenTeaYT Exception und zur OOP fragen? Java Basics - Anfänger-Themen 3
O Exception bei Parse-Vorgang Java Basics - Anfänger-Themen 17
T Exception Problem Java Basics - Anfänger-Themen 5
Z Getter/Setter NullPointer Exception Java Basics - Anfänger-Themen 6
W Nullpointer Exception bei .add(...) Java Basics - Anfänger-Themen 6
L Input/Output InputMismatch.Exception Java Basics - Anfänger-Themen 7
B Exception Liste von Liste Java Basics - Anfänger-Themen 3
D Throw Exception Java Basics - Anfänger-Themen 2
MiMa JavaDoc Exception @throws schlagen an Java Basics - Anfänger-Themen 4
J Exception in thread "main" Java Basics - Anfänger-Themen 1
B Exception richtig einbinden Java Basics - Anfänger-Themen 1
M Exception soll Werte mitgeliefert bekommen Java Basics - Anfänger-Themen 12
M Selbstdefinierte Exception Java Basics - Anfänger-Themen 5
B Exception Throwable Java Basics - Anfänger-Themen 11
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
F Operatoren Wieso fliegt hier eine NullPointer Exception :( Java Basics - Anfänger-Themen 3
F nullpointer exception - arrayerstellung Java Basics - Anfänger-Themen 4
K Iterator-Interface implementieren mit Exception Handlung Java Basics - Anfänger-Themen 1
H Erste Schritte Exception: 0 Java Basics - Anfänger-Themen 2
A Exception vs. Testklasse (Programm testen) Java Basics - Anfänger-Themen 2
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
K Exception nur im "Debug"-Modus und jedem 3.-5. mal Ausführen Java Basics - Anfänger-Themen 3
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5
L [JFrame] Exception - woher? Java Basics - Anfänger-Themen 8
N Threads Exception in thread "main"... Feher bei dem Versuch ein Radius zu berechnen Java Basics - Anfänger-Themen 4
R "Missbrauch" von Exception zum Programmfluss Java Basics - Anfänger-Themen 1
U Exception: OutOfMemoryError Java Basics - Anfänger-Themen 11
A Int Eingabe: String mit Exception abfangen. Aber wie? Java Basics - Anfänger-Themen 3
A Code läuft nicht, Fehlermeldung Exception in thread "main" java.lang.Error: Unresolved compilation " Java Basics - Anfänger-Themen 11

Ähnliche Java Themen

Neue Themen


Oben