Keine richtige Codeabarbeitung?!

Status
Nicht offen für weitere Antworten.

philipp65

Mitglied
Hallo!

Ich bin dabei, ein Java Programm zu schreiben, dass mir unter anderem ein paar Dateien auf einem FTP uploaded. Irgendwie wird das Programm aber nicht sequentiell abgearbeitet...

hier mal der wichtige Auszug aus dem Code:
Java:
		if (e.getSource() == uploadB)
		{
			
			c.remove(list);
			c.add(txt,BorderLayout.CENTER);

			
			txt.setText("Bildergalerie wird hochgeladen, dies kann bis zu einige Minuten dauern...\n\n");
			System.out.println("Text hier");
			
			uploadB.setEnabled(false);		
			
			

			try 
			{
				TestFTP ftp = new TestFTP();
				String serverName = "xxxxxxxxxxxxxxxx";
				if (ftp.connectAndLogin(serverName, "xxxxx", "xxxxx")) 
				{
					txt.append("Connected to " + serverName + "\n\n");
					try 
					{
						ftp.changeWorkingDirectory("www");
.
.
.

Was passiert:
Ich klicke den Uploadbutton und die obige Methode wird im ActionPerformed aufgerufen.
Nun wichtig!! Die Zeilen vor dem try werden bis auf den System.out NICHT beachtet und erst nach dem try catch ausgeführt.
Weiters wird txt.append nicht ausgeführt innerhalb des try/catch.

Das Problem hatte ich schon mehrmals in verschiedenen Zusammenhängen. Vielleicht steh ich auch nur auf der Leitung.

Was meint ihr?


MfG
Philipp
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Du musst Veränderungen von GUI-Objecten im EDT ausführen.
Einfach um alle Anweisungen oder Anweisungsblöcke welche die GUI-Objecte verändern diesen Code drumbauen:
Java:
SwingUtilities.invokeLater(new Runnable() {
	public void run() {
		// hier nur GUI-veränderenden Code ausführen
	}
});
Bin mir grad nicht ganz sicher, ob es dein Problem beheben wird, man sollte es aber so oder so machen, deswegen wirds nix schaden ;)
 
Zuletzt bearbeitet:

Leroy42

Top Contributor
Was passiert:
Ich klicke den Uploadbutton und die obige Methode wird im ActionPerformed aufgerufen.
Nun wichtig!! Die Zeilen vor dem try werden bis auf den System.out NICHT beachtet und erst nach dem try catch ausgeführt.

Falsch! Die Zeilen (Methodenaufrufe) werden der Reihe nach abgearbeitet.

Erst die Visualisierung (durch den Event-Dispatch-Thread) wird ausgeführt wenn die gesamte Methode beendet ist.
 

philipp65

Mitglied
Hmm...also ich hab das jetzt probiert und es ändert zwar die reihenfolge, jedoch noch immer nicht so wie gewünscht. Codemäßig siehts jetzt so aus:

Java:
		if (e.getSource() == uploadB)
		{
			SwingUtilities.invokeLater(new Runnable() 
			{
			    public void run() 
			    {
			    	c.remove(list);
					c.add(txt,BorderLayout.CENTER);
		
					
					txt.setText("Bildergalerie wird hochgeladen, dies kann bis zu einige Minuten dauern...\n\n");
					
					
					uploadB.setEnabled(false);		

			    }
			});	
			
			System.out.println("Text hier");

			try 
			{
				TestFTP ftp = new TestFTP();
				String serverName = "xxxxxxxxxx";
				if (ftp.connectAndLogin(serverName, "xxxx", "xxxx")) 
				{
					txt.append("Connected to " + serverName + "\n\n");
					try 
					{
						ftp.changeWorkingDirectory("www");
.
.
.

Habe ich was falsch verstanden? Benötigt ihr noch mehr Code?
 
B

Beni

Gast
Da dieser Code von einem ActionListener (bzw. einem Button) aufgerufen wird, wird er im EDT ausgeführt. Und solange du irgendetwas im EDT machst, kann die GUI nicht gezeichnet werden.

In diesem Fall müsstest du alle Arbeit im try{...} in einen eigenen Thread auslagern um den EDT freizukriegen. Das "invokeLater" ist dann nur notwendig, wenn du von diesem neuen Thread aus die GUI ändern möchtest.
 

philipp65

Mitglied
Da dieser Code von einem ActionListener (bzw. einem Button) aufgerufen wird, wird er im EDT ausgeführt. Und solange du irgendetwas im EDT machst, kann die GUI nicht gezeichnet werden.

In diesem Fall müsstest du alle Arbeit im try{...} in einen eigenen Thread auslagern um den EDT freizukriegen. Das "invokeLater" ist dann nur notwendig, wenn du von diesem neuen Thread aus die GUI ändern möchtest.

Hallo,
Das müsste aber auch heißen, dass GUI Änderungen nur dann nicht möglich sind, wenn in dieser actionPerformed Methode AUCH Threads vorkommen. Sofern nur GUI Änderungen in der actionPerformed vorkommen, habe ich kein Problem.

Siehe:
Java:
	public void actionPerformed(ActionEvent e) 
	{
		if (e.getSource() == pfadB)
		{
			if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
			{
				c.remove(txt);
				c.add(new JScrollPane(list),BorderLayout.CENTER);
				c.repaint();
				c.validate();
				repaint();
				validate();
				
				lm.removeAllElements();
				helf = fc.getSelectedFile();
				pfadTxt.setText(String.valueOf(helf));
				files = helf.listFiles();
		

				for (int i=0; i<files.length; i++)
					lm.addElement(files[i]);
				
				uploadB.setEnabled(true);
			}
		}
		if (e.getSource() == uploadB)
		{
	    	c.remove(list);
			c.add(txt,BorderLayout.CENTER);

			txt.setText("Bildergalerie wird hochgeladen, dies kann bis zu einige Minuten dauern...\n\n");
			
			uploadB.setEnabled(false);					

	    	try 
			{
				TestFTP ftp = new TestFTP();
.
.
.
Man sieht hier, dass beim ersten Button ebenfalls bzw ausschließlich GUI Änderungen vorgenommen werden und dies ohne Probleme. Probleme kommen nur, wenn ich zusätzlich FTP Aktionen durchführe.


Könntest du / Könntet ihr mir einen Tipp geben, wie ich den Tread auslagere. Ich finde dazu keine Literatur und nichts im Forum.
Alles, was ich eigentlich will, ist dem Anwender ein paar Feedbacks über den Verlauf des FTP Uploads zu geben.

MfG
Philipp
 
J

JohannisderKaeufer

Gast
Java:
	public void actionPerformed(ActionEvent e) 
	{
//Jetzt schauen wir mal ob es sich um den EDT Handelt?
System.out.println("EDT"+SwingUtilities.isEventDispatchThread());
		if (e.getSource() == pfadB)
		{
			if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
			{
				c.remove(txt);
				c.add(new JScrollPane(list),BorderLayout.CENTER);
				c.repaint();
				c.validate();
				repaint();
				validate();
				
				lm.removeAllElements();
				helf = fc.getSelectedFile();
				pfadTxt.setText(String.valueOf(helf));
				files = helf.listFiles();
		

				for (int i=0; i<files.length; i++)
					lm.addElement(files[i]);
				
				uploadB.setEnabled(true);
			}
		}
		if (e.getSource() == uploadB)
		{
	    	c.remove(list);
			c.add(txt,BorderLayout.CENTER);

			txt.setText("Bildergalerie wird hochgeladen, dies kann bis zu einige Minuten dauern...\n\n");
			
			uploadB.setEnabled(false);					

	    	try 
			{
new Thread(new Runnable(){
public void run(){
//Das sollte jetzt nicht der EDT sein
System.out.println("EDT an Stelle 2:"+SwingUtilities.isEventDispatchThread());
				TestFTP ftp = new TestFTP();
//GUI UPdates
SwingUtilities.invokeLater(new Runnable(){
public void run(){
//GUI Updates können dann hier von statten gehen.
...
}
});
ftp= new TestFTP();
}
}).start();
.
.
.

Das ganze sollte in etwa so aussehen;
 

philipp65

Mitglied
So...hier noch für alle mit dem selbigen Problem, das ich hatte der finale Code mit Komentaren versehen, wie ich es mir vorstelle:

Java:
	public void actionPerformed(ActionEvent e) 
	{
		//EDT, wird aufgerufen, sobald der obere Button gedrückt wird
		if (e.getSource() == pfadB)
		{
			//Sobald man den Ordner bestätigt
			if (fc.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
			{
				//Textfeld wird entfernt, Liste mit Inhalt hinzugefügt, neuzeichnen des Layouts
				c.remove(txt);
				c.add(new JScrollPane(list),BorderLayout.CENTER);
				c.repaint();
				c.validate();
				repaint();
				validate();
				
				//alle Elemente der Liste werden Gelöscht, sofern welche vorhanden sind
				lm.removeAllElements();
				
				//Die Liste wird nun mit den Ordnerinhaltsverzeichnissen gefüllt
				helf = fc.getSelectedFile();
				pfadTxt.setText(String.valueOf(helf));
				files = helf.listFiles();
				for (int i=0; i<files.length; i++)
					lm.addElement(files[i]);
				
				//Der Uploadbutton wird nun klickbar
				uploadB.setEnabled(true);
			}
		}
		
		//Wird aufgerufen, sobald der untere Button geklickt wird
		if (e.getSource() == uploadB)
		{
		    try 
            {
		    	//Es wird ein eigener Thread erzeugt, um Swingänderungen synchron durchzuführen
				new Thread(new Runnable()
				{
					public void run()
					{
						//nicht der EDT, GUI Updates
			            TestFTP ftp;
			
			            SwingUtilities.invokeLater(new Runnable()
			            {
			            	public void run()
			            	{
			            		//GUI Updates können dann hier von statten gehen.
						    	c.remove(list);
								c.add(txt,BorderLayout.CENTER);

								txt.setText("\nBildergalerie wird hochgeladen, dies kann einige Minuten dauern...\n\n");
								
								uploadB.setEnabled(false);
			            	}
			            });
			            
			            ftp= new TestFTP();
				    	try 
						{
							//Der Servername wird festgelegt
							String serverName = "xxxxxxxxxxxx";
							
							//Verbindungsversuch
							if (ftp.connectAndLogin(serverName, "xxxxxx", "xxxxxx")) 
							{
								//Wenn erfolgreich, dann visuelle Rückmeldung
								txt.append("Connected to " + serverName + "\n\n");
								try 
								{
									//Galeriename und -pfad werden für spätere Zwecke gespeichert
									String galeryname = files[list.getSelectedIndex()].getName();
									String galerypath = list.getSelectedValue().toString();
									

									ftp.setPassiveMode(true);
									ftp.ascii();
									
									//Wechsel in richtigen FTP Pfad + visuelle Rückmeldung
									txt.append("Current Directory: " + ftp.printWorkingDirectory() + "\n");
									ftp.changeWorkingDirectory("www");
									txt.append("Current Directory: " + ftp.printWorkingDirectory() + "\n");
									ftp.changeWorkingDirectory("home");
									txt.append("Current Directory: " + ftp.printWorkingDirectory() + "\n");
									ftp.changeWorkingDirectory("photography");
									txt.append("Current Directory: " + ftp.printWorkingDirectory() + "\n");
									ftp.changeWorkingDirectory("home");
									txt.append("Current Directory: " + ftp.printWorkingDirectory() + "\n");
									ftp.changeWorkingDirectory("_galery");
									txt.append("Current Directory: " + ftp.printWorkingDirectory() + "\n");
									
									
									//Die Bildergalerie wird nun hochgeladen
									ftp.makeDirectory(galeryname);
									ftp.changeWorkingDirectory(galeryname);
									txt.append("Current Directory: " + ftp.printWorkingDirectory() + "\n");
									
.
.
.

Lg und vielen Dank für die Hilfe

Thread kann geschlossen werden

Philipp
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
krgewb Keine richtige Doku Java Basics - Anfänger-Themen 5
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
G Endlosschleife keine Rückgabe Java Basics - Anfänger-Themen 36
Nooobi Regex und .matches() geben keine Ausnahme Java Basics - Anfänger-Themen 10
berserkerdq2 Warum ist das keine Referenzkopie mehr? Java Basics - Anfänger-Themen 26
O Java 17 keine Pflicht um Exceptiones zu behandeln? Java Basics - Anfänger-Themen 2
nbergmann Installation unter jdk.java.net: Keine ZIP-Datei zum entpacken Java Basics - Anfänger-Themen 2
M Eclipse kennt keine String Klasse mehr Java Basics - Anfänger-Themen 1
K Erste Schritte "Taschenrechner" zeigt keine Komma Zahlen an. Java Basics - Anfänger-Themen 8
M Keine Ausführung von System.out.println() Java Basics - Anfänger-Themen 3
H Warum kann man keine Parameter in die main-Methode packen? Java Basics - Anfänger-Themen 4
B Nach eingefügtem Code erkennt Compiler keine Instanzvar und meldet SyntaxError Java Basics - Anfänger-Themen 2
A keine Ergebnisse - String nummer in array nummer converting Java Basics - Anfänger-Themen 1
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
M Regex nur Zahlen und Punkt zulassen, Keine Eingabe(Leeres TextFeld) nicht zulassen Java Basics - Anfänger-Themen 6
B Ich kann keine Hühner töten Java Basics - Anfänger-Themen 49
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
I Regex findet keine Treffer Java Basics - Anfänger-Themen 4
B Keine Ausgabe .. Woran liegt das? Ich komme nicht weiter Java Basics - Anfänger-Themen 14
T Bei mir wird keine javac angezeigt sondern nur javacpl Java Basics - Anfänger-Themen 2
R Keine Verbindung mit MariaDB Java Basics - Anfänger-Themen 18
O Input/Output newbile und keine Ahnung! Java Basics - Anfänger-Themen 16
S Kann keine Bilder laden? Java Basics - Anfänger-Themen 9
C Problem: PC ohne Internet und keine Möglichkeit Programme zu laden Java Basics - Anfänger-Themen 5
Bun17 Keine Ausgabe in der Konsole Java Basics - Anfänger-Themen 2
R Keine Verbindung zu MySql über Netbeans Java Basics - Anfänger-Themen 15
D jsoup.select findet keine elemente Java Basics - Anfänger-Themen 2
U Null Exception aber keine Ahnung warum Java Basics - Anfänger-Themen 5
W Was bedeutet im Struktogramm „zufall“ aufrufen (keine Parameterübergabe)? Java Basics - Anfänger-Themen 8
T Keine Ahnung vom Programieren Java Basics - Anfänger-Themen 28
A SelectionSort bringt keine konstanten Ergebnisse Java Basics - Anfänger-Themen 4
J RPN Taschenrechner - keine Lösung!! Java Basics - Anfänger-Themen 84
I equals (Override) mit eigener Exception (keine Runtime-Exception) Java Basics - Anfänger-Themen 9
C Keine javac.exe in bin-Datei Java Basics - Anfänger-Themen 3
A Vollkommene Zahlen: Findet keine Einzige Java Basics - Anfänger-Themen 9
J Input/Output javac HelloWorld.java - Keine Textausgabe in der Konsole Java Basics - Anfänger-Themen 4
H JDK installieren keine Installationsroutine bei Javainstallation sichtbar Java Basics - Anfänger-Themen 4
H Buttons zeigen keine Reaktion Java Basics - Anfänger-Themen 6
I Programm von mir - keine Ahnung mehr ob richtig falsch:-( Java Basics - Anfänger-Themen 6
D Datentypen Datentyperstellung | Kompiler sagt Syntax Error doch ich find keine Lösung Java Basics - Anfänger-Themen 2
snipesss IDE zeigt keine Fehler an, Programm wird jedoch nicht ausgeführt. Java Basics - Anfänger-Themen 18
Khorgoroth Erste Schritte Keine Ausgabe Java Basics - Anfänger-Themen 2
P Listen sortieren mit Binärbaum gibt keine Ausgabe ab 10000 Integern Java Basics - Anfänger-Themen 14
Z AWT package -> keine Konsole? Java Basics - Anfänger-Themen 2
Henri keine Ausgabe Java Basics - Anfänger-Themen 5
J TableView zeigt keine Daten an Java Basics - Anfänger-Themen 14
C Java stellt unter Windows keine Umlaute dar Java Basics - Anfänger-Themen 9
A Keine Konsolenausgabe Java Basics - Anfänger-Themen 5
D Methoden Filewriter macht keine Zeilenumbrüche Java Basics - Anfänger-Themen 3
D Compiler-Fehler NullPointerExeption aber Ecplise zeigt keine Fehler an?! Java Basics - Anfänger-Themen 8
D addActionListener zeigt keine Wirkung Java Basics - Anfänger-Themen 8
S Warum erlaubt ein while-Loop keine Variablen-Declaration wie der for-Loop..? Java Basics - Anfänger-Themen 6
M Lottozahlen 6 aus 49 keine doppelten Java Basics - Anfänger-Themen 5
D Keine Ausgabe in meinem Helden Programm Java Basics - Anfänger-Themen 2
M Keine Ausgabe Java Basics - Anfänger-Themen 4
C PrintWriter schreibt keine in Strings enthaltenen Zeilenumbrüche Java Basics - Anfänger-Themen 9
D Keine Funktion bei "else" Java Basics - Anfänger-Themen 5
J Rückgabe als Wert, keine Referenz Java Basics - Anfänger-Themen 3
K Keine doppelten Zufallszahlen im Array Java Basics - Anfänger-Themen 17
X Einfach verkettete Liste, keine Fehlermeldung Programm friert ein Java Basics - Anfänger-Themen 4
1 Mini Programm, keine Eingabe möglich.. Java Basics - Anfänger-Themen 6
P Wiedereinstieg und kann keine Dateien mehr öffnen... Java Basics - Anfänger-Themen 13
R Keine doppelten Zufallszahlen Java Basics - Anfänger-Themen 2
T Buffererwriter keine Exception obwohl Client weg Java Basics - Anfänger-Themen 2
D Java Eclipse hat scheinbar keine library Java Basics - Anfänger-Themen 2
M Keine Datenbank verbindung Java Basics - Anfänger-Themen 14
E Keine Ausgabe der Konsole Java Basics - Anfänger-Themen 4
Pentalon Eclipse JUNO keine Vorschläge von Methoden bzw. Interfaces der eigenen Klassen Java Basics - Anfänger-Themen 5
tuttle64 Keine Umlaute im Dos Fenster Java Basics - Anfänger-Themen 12
D Erstellte Jar datei zeigt keine Bilder an Java Basics - Anfänger-Themen 5
L Klassen Ich kann keine .jar Dateien mehr öffnen Java Basics - Anfänger-Themen 4
J Haben Chars wirklich keine KeyCodes? Java Basics - Anfänger-Themen 12
L Applet : keine Recht für Zugriff auf Clipboard (trotz Zertifikat) Java Basics - Anfänger-Themen 4
A contains bzw. indexOf liefert keine Treffer? Java Basics - Anfänger-Themen 3
M Java Webstart keine Zugriffe Java Basics - Anfänger-Themen 7
W Eclipse erstellt keine Klassen Java Basics - Anfänger-Themen 6
B Aus einem Eclipse Projekt eine .jar - keine Bilder drin Java Basics - Anfänger-Themen 7
K org.h2.jdbc.JdbcSQLException: Keine Daten verfügbar Java Basics - Anfänger-Themen 9
J Mehrere Zufallszahlen erzeugen, aber keine darf doppelt erzeugt werden - Wie? Java Basics - Anfänger-Themen 5
E String soll mit Großbuchstaben anfangen und keine Sonderzeichen enthalten Java Basics - Anfänger-Themen 4
P Zugriff auf Attribute einer Klasse, zu der keine Verbindung besteht Java Basics - Anfänger-Themen 11
J InputStreamReader + BufferedReader - keine Eingabemöglichkeit Java Basics - Anfänger-Themen 10
T JTable keine spaltenbeschriftung Java Basics - Anfänger-Themen 2
G Input/Output FilenameFilter aber bitte keine Unterordner Java Basics - Anfänger-Themen 5
M nach jar export keine db abfrage möglich Java Basics - Anfänger-Themen 2
G JDK installieren keine eclipse.exe gefunden Java Basics - Anfänger-Themen 16
S Erste Schritte Wo steht eigentlich das ein jar keine andere jars enthalten darf? Java Basics - Anfänger-Themen 19
O Erste Schritte Klassenname zurückgeben, keine instanz Java Basics - Anfänger-Themen 23
K keine Reaktion im TableModel nach ändern der liste? Java Basics - Anfänger-Themen 2
T keine buchstaben!nur zahlen eingabe möglich Java Basics - Anfänger-Themen 48
M keine geschwungenen Klammern Java Basics - Anfänger-Themen 9
E Input/Output Socket bekommt keine Verbindung bei funktionierendem Fremdziel Java Basics - Anfänger-Themen 2
V JavaApplet versendet keine mail Java Basics - Anfänger-Themen 8
B Interface Nach "package"-Nennung keine Toolbar-Icons mehr Java Basics - Anfänger-Themen 5
B Geerbte Instanz kann keine void Methode ausführen?! Java Basics - Anfänger-Themen 15
S Java Web Start lädt keine Bilder Java Basics - Anfänger-Themen 2
P Keine Rechenoperationen bei Doublewert? Java Basics - Anfänger-Themen 4
B Variablen keine Arrayübergabe für getter im Interface Java Basics - Anfänger-Themen 8
I Habe keine Idee was ich als Anfänger programmieren kann. Java Basics - Anfänger-Themen 4
R Kalender speichert keine Zeit Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben