Mehrere Threads - ein Stack

Flu

Mitglied
Hi Leute.
Ich bin noch nicht so firm in nebenläufiger Programmierung und stehte jetzt vor einem Problem.
Ein Programm besteht aus mehreren Threads.
In der Hauptklasse exisitert ein Stack, in dem jeder Thread Strings ablegen soll, damit die Hauptklasse diese auslesen kann.
Dafür wir den Nebenklassen die Hauptklasse übergeben - diese rufen dann per hauptklasse.commands.add(...) den Stack auf.

Dabei werden auch keine Exceptions geworfen - allerdings ist der Stack immer leer?!

Gibt es da eine möglichkeit? Alle Klassen sind von Thread abgeleitet.
 
S

SlaterB

Gast
klingt eher nach denkbaren Nebenproblemen wie doch nicht Hauptklasse übergeben sondern neu erstellt -> verschiedene Objekte,
manche leer, manche nicht

komplettes kleines Codebeispiel wäre hilfreich
 

Flu

Mitglied
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Stack;
import java.util.StringTokenizer;


public class Client extends Thread {

	// Verbindungsvariablen
	final String user = "user";
	final String pass = "pass";
	public String host = "localhost";
	int port = 21;
	
	
	// PASV
	int portNew;
	String ipNew = "";

	public Stack<String> commands = new Stack<String>();

	boolean lastCommand = false;

	// Sockets
	Socket serverSocket;
	Socket pasvSocket;
	PrintWriter writeCommands;
	BufferedReader fromServer;
	
	PrintWriter writePasvCommands;
	BufferedReader fromPasvServer;

	// Baut die Verbindung auf
	public void connect() throws IOException {

		try {
			serverSocket = new Socket(host, port);
			System.out.println("Baue Verbindung auf ...");
			fromServer = new BufferedReader(new InputStreamReader(
					serverSocket.getInputStream()));
			writeCommands = new PrintWriter(serverSocket.getOutputStream(),
					true);
		} catch (UnknownHostException e) {
			System.out.println("Host unbekannt!");
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public void USER() throws IOException {
		writeCommands.print("USER " + user + "\n");
		writeCommands.flush();
	}
	
	public void PASS() {
		writeCommands.print("PASS " + pass +"\n");
		writeCommands.flush();
	}
	
	public void NOOP() {
		writeCommands.print("NOOP\n");
		writeCommands.flush();
	}
	
	public void getStatus() {
		Thread konsole = new Thread(new Konsole(this));
		konsole.start();
	}
	
	// PASV anschalten
	public void PASV() throws IOException, InterruptedException {
		
		writeCommands.print("PASV\n");
		writeCommands.flush();
		getPasvCon();
		

	}
public synchronized void getPasvCon() throws IOException, InterruptedException {
		System.out.println("!!!!!!");
		// Commands abholen
		

		// IP Adresse holen

		String pasv = commands.lastElement(); 
		String ipAndPort = pasv.substring(pasv.indexOf("(") + 1,
				pasv.indexOf(")"));

		StringTokenizer getIp = new StringTokenizer(ipAndPort);

		// holt die IP
		String ipNew = "";   // IP für den neuen Socket
		for (int i = 0; i < 4; i++) {
			if (i < 3) {
				ipNew += (getIp.nextToken(",") + ".");
			} else {
				ipNew += (getIp.nextToken(","));

			}
		}


		Integer portTemp1 = new Integer( getIp.nextToken(","));
		Integer portTemp2 = new Integer (getIp.nextToken(","));
		portNew = (portTemp1 << 8 )+ portTemp2;


		try {
			
			pasvSocket = new Socket(ipNew, portNew);
			
		} catch (UnknownHostException e) {
			System.out.println("Host unbekannt");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		try {
			fromPasvServer = new BufferedReader(new InputStreamReader(
					pasvSocket.getInputStream()));
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			writePasvCommands = new PrintWriter(pasvSocket.getOutputStream(),
					true);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
		


		
	}
	
	public void LIST() throws IOException  {
	writeCommands.print("LIST\n");
	writeCommands.flush();
	
	}
	
	
	public void run() {
		try {
			connect();
	
	//		getStatus();

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			USER();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		PASS();


		try {
			PASV();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public Client() throws IOException {
		
	}

	
	
	public static void main(String[] args) throws IOException, InterruptedException {
		Client test = new Client();
		Thread client = new Thread(test);
		client.start();
		
		Thread.sleep(300);
	
		
		Thread konsole = new Thread(new Konsole(test));
		konsole.setDaemon(true);
		konsole.start();
		
		
		
		Disrupter disrupt = new Disrupter(test);
		disrupt.start();
		
		
	
	}

	
	
}

eine nebenklasse

Java:
import java.io.IOException;


public class Konsole extends Thread {
	
	static int id = 0;
	
	Client client;
	
	public Konsole(Client client) {
		this.client = client;
	}
	
	public void run() {
		System.out.println("========= Konsole "+ ++id +" started");
		
	while(true) {
		
		
		try {
			
			String line = client.fromServer.readLine();
			synchronized(client.commands){
			client.commands.add(line);
				System.out.println(line);
			}
				if(line == null) {break;}
			
			
		} catch (IOException e) {}
		
	}
	
			
					
			
	}
}


exceptions

Exception in thread "Thread-2" java.util.NoSuchElementException
at java.util.Vector.lastElement(Vector.java:456)
at Client.getPasvCon(Client.java:93)
at Client.PASV(Client.java:82)
at Client.run(Client.java:174)
at java.lang.Thread.run(Thread.java:680)
 
Zuletzt bearbeitet:
S

SlaterB

Gast
und du kennst alle Abläufe?
ein paar System.out.println() hast du doch schon drin, baue mehr ein, etwa in Konsole
System.out.println("read line: .., save it in stack .. (hashcode, size)");
Ausgaben vor nach dem synchronized-Block wenn andere Abfragen dort nicht synchronisiert sind

sowie die Schritte in der run-Methode der Client-Klasse loggen bis hin zu den schlimm benannten PASV- + getPasvCon-Methoden,
findet alles in korrekter Reihenfolge statt?
frage auch im Client selber evtl. noch den hashcode des Stacks ab, der ist ziemlich deutlich zur Unterscheidung mehrerer
 
B

bERt0r

Gast
Tja, dein Stack ist leer und du willst auf das "last Element" zugreifen, darum die Exception.
Leider verwendest du den Stack so als wäre er ein Vector (er erbt ja davon aber warum dann Stack).
Stacks bedienst du normalerweise mit push und pop. Du musst aber auch überprüfen, ob dein Stack leer ist bzw diese Exception abfangen.
 

Flu

Mitglied
Das der Stack leer ist weiß ich, mein Problem war wieso :)
Aber ein Thread.Sleep hat das Problem gelöst. Da war der Schreibvorgang wohl schneller als die Erstellung
 

Michael...

Top Contributor
Unabhängig davon, sollte/muss überprüft werden, ob in dem Stack etwas enthalten ist, bevor man versucht etwas rauszuholen.
Und die Anmerkung: Warum Stack, wenn er doch nur als Vector benutzt wird ist auch berechtigt?
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Eclipse Mehrere Threads, mehrere Konsolen Allgemeine Java-Themen 4
G mehrere Threads starten/stoppen Allgemeine Java-Themen 4
Meldanor Speichern der Datenbank - Lohnen sich mehrere Threads? Allgemeine Java-Themen 2
G mehrere Threads verwalten? Allgemeine Java-Themen 14
T Mehrere Threads greifen auf eine Klasse zu Allgemeine Java-Themen 21
I Mehrere Klassen mit den selben Daten Allgemeine Java-Themen 5
berserkerdq2 Ist es schlechter Programmierstyle mehrere Panes aufeinander zu machen? Allgemeine Java-Themen 1
Tarrew OpenAPI Schnittstelle - Mehrere Kunden mit unterschiedlichen Zugriffsrechten Allgemeine Java-Themen 2
A Mehrere for-Schleifen Allgemeine Java-Themen 2
M Mehrere Sounds Allgemeine Java-Themen 3
M Mehrere Ressourcen in einem package ablegen Allgemeine Java-Themen 1
Avalon DTO aus mehrere Entitäten erstellen Allgemeine Java-Themen 5
H Mehrere PNG-Files in einer Datei Allgemeine Java-Themen 9
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
Curtis_MC Collections Liste anhand mehrere Kriterien sortieren Allgemeine Java-Themen 6
bueseb84 Git : Mehrere Server verwenden Allgemeine Java-Themen 3
L Mehrere .Jar Files aufrufen Allgemeine Java-Themen 9
L mehrere Methoden Allgemeine Java-Themen 19
W Variablenübergabe über mehrere Klassen Allgemeine Java-Themen 4
B StAX Parser - mehrere Methoden, ein XML Allgemeine Java-Themen 4
T String mehrere Worte Allgemeine Java-Themen 2
N Bei Mouse Events nicht mehrere Objekte erstellen Allgemeine Java-Themen 13
J Variablen Mehrere int-variablen in txt abspeichern und danach wieder auslesen Allgemeine Java-Themen 1
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
H Java FX 2 Fragen um Programm in mehrere sprachen zu übersetzen in Gluon Framwork Allgemeine Java-Themen 3
F Listen - Mehrere Objekte Allgemeine Java-Themen 1
R Variable durch mehrere Methoden ändern und nutzen Allgemeine Java-Themen 17
S libGDX mehrere Texturen zu Einer zusammenfassen Allgemeine Java-Themen 0
X Mehrere booleans in Datei Speichern, Updaten und Laden Allgemeine Java-Themen 1
OnDemand CSV parsen mehrere Zeilen Allgemeine Java-Themen 22
K Mehrere Programmiersprachen gleichzeitig lernen Allgemeine Java-Themen 3
C Mehrere Seiten drucken in Hoch- und Querformat Allgemeine Java-Themen 0
perlenfischer1984 Mehrere Komponenten erstellen Allgemeine Java-Themen 3
F AWT Mehrere Tastatureingaben verarbeiten Allgemeine Java-Themen 5
J Mehrere Wörter getrennt in eine Array einlesen, wie ? Allgemeine Java-Themen 7
HarleyDavidson Best Practice Integer-Zahlenfolge über mehrere Programmstarts Allgemeine Java-Themen 7
F Mehrere JTables' drucken Allgemeine Java-Themen 0
2 mehrere Json Werte Parsen Allgemeine Java-Themen 3
stylegangsta Mehrere html seiten einer Homepage einlesen und als Textdatei ausgeben Allgemeine Java-Themen 14
P Mehrere Java Versionen auf dem Rechner Allgemeine Java-Themen 3
B JAVA - mehrere Clienten gleichzeitig starten. Nicht bei Code! Allgemeine Java-Themen 3
S PrintWriter.println() schreibt mehrere Zeilen Allgemeine Java-Themen 19
2 Mehrere Uhrzeiten Sortieren Allgemeine Java-Themen 2
T Jsoup: Mehrere Links nacheinander parsen Allgemeine Java-Themen 11
T Schlüsselworte mehrere public-Klassen in einem Paket Allgemeine Java-Themen 7
E Lesen von mehrere Csv-Datei und ihre Inhalte vergleichen Allgemeine Java-Themen 3
K GUI-Entwicklung - Dispose, enabling und mehrere Controller Allgemeine Java-Themen 1
A Threads Lock über mehrere Abschnitte in verschiedenen Methoden Allgemeine Java-Themen 5
H Mehrere Bilder aus einer Datei lesen Allgemeine Java-Themen 2
B Mehrere Objekte verschlüsselt serialisieren Allgemeine Java-Themen 6
S Tool um mehrere Klassen in einer Klasse vereinen? Allgemeine Java-Themen 6
K Mehrere Arrays auf einmal erstellen Allgemeine Java-Themen 2
R ListIterator über mehrere Arrays Allgemeine Java-Themen 13
J JFreeChart - Mehrere X-Achsen Einteilungen Allgemeine Java-Themen 3
S Mehrere Shapes "malen" Allgemeine Java-Themen 3
M Input/Output Mehrere Bilder aus Resourcen auslesen Allgemeine Java-Themen 8
J Erste Schritte Mehrere Mauszeiger für Ping Pong Game Allgemeine Java-Themen 7
P Mehrere MP3s abspielen Allgemeine Java-Themen 3
M Mehrere CRLF entfernen Allgemeine Java-Themen 13
K Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift Allgemeine Java-Themen 19
B JUnit und mehrere Instanzen der selben Applikation Allgemeine Java-Themen 4
A Email versenden mehrere Zeilen Allgemeine Java-Themen 10
D Mehrere String-Werte in eine Tabellen-Zelle schreiben Allgemeine Java-Themen 8
R JTree - Mehrere Roots Allgemeine Java-Themen 6
Beckenbauer Mehrere Paragraphe in eine Word Datei schreiben Allgemeine Java-Themen 4
H Mehrere Anwendungen von Java kontrollieren lassen Allgemeine Java-Themen 10
T Edit: JLabel+MouseListener oeffnet mehrere Instanzen Allgemeine Java-Themen 5
O split mit einem ODER mehrere Tabulatoren oder Leerzeichen Allgemeine Java-Themen 6
M JFreeChart mehrere PieCharts erstellen Allgemeine Java-Themen 2
S Wie kann ein Observer mehrere Observables beobachten? Allgemeine Java-Themen 9
T Synchronisation von Listen bei Zugriffen durch mehrere Prozesse Allgemeine Java-Themen 15
D befehl auf mehrere objekte anwenden Allgemeine Java-Themen 7
B mehrere services in einem client Allgemeine Java-Themen 10
G Process - mehrere Commands?! Allgemeine Java-Themen 2
O Mehrere Exemplare(Kopieen) drucken Allgemeine Java-Themen 2
S log4j Logging über mehrere Klassen Allgemeine Java-Themen 13
F 1 Key - mehrere Values Allgemeine Java-Themen 3
G JOGL mehrere GLCanvas erstellen Allgemeine Java-Themen 2
S Mehrere Listen ineinander verschachteln Allgemeine Java-Themen 22
P Java3D mehrere Ebenen parallel zu yz-Ebene Allgemeine Java-Themen 9
R mehrere jar Dateien kompinieren Allgemeine Java-Themen 14
P Mehrere Instanzen der selben Appl. verhindern Allgemeine Java-Themen 12
M Scanner-Methode: Mehrere Eingaben mit Exception behandeln Allgemeine Java-Themen 10
I Wie kann ich mehrere Mp3 Tags ausgeben? Allgemeine Java-Themen 6
I Mehrere MP3 Dateien einlesen? Allgemeine Java-Themen 3
G String.replaceall - mehrere Zeichen durch eines ersetzen Allgemeine Java-Themen 5
C ArrayList sortieren (mehrere Kriterien) Allgemeine Java-Themen 6
N mehrere klassen extenden Allgemeine Java-Themen 33
G Oracle will mehrere hundert Produkte patchen Allgemeine Java-Themen 5
F Logger in mehrere Dateien mit log4J Allgemeine Java-Themen 4
W Properties-Klasse: mehrere Parameter-Belegungen übergeben? Allgemeine Java-Themen 2
Daniel_L Mehrere (XML-)Datei aus einer ZIP-Datei auslesen Allgemeine Java-Themen 4
V Mehrere main() in jar, wie starten? Allgemeine Java-Themen 4
A Problem: Mehrere PDF-Files nacheinander Öffnen Allgemeine Java-Themen 12
D Mit Linux mehrere Kommandos in einem Subprozeß Allgemeine Java-Themen 3
D Suche sowas wie Map nur für mehrere Werte Allgemeine Java-Themen 13
V JFilechooser, mehrere Datein selektieren und Reihenfolge? Allgemeine Java-Themen 2
K Applet dass auf mehrere Bibliotheken zugreift Allgemeine Java-Themen 13
F mehrere Verzeichnisse als Parameter Allgemeine Java-Themen 15
G mehrere url's in ein array (problem mit // ) Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben