Hallo Forum,

ich bin wieder an einer Stelle angelangt, an der ich mit meinem bisherigen Kenntnissen nicht weiter komme.

Problem: Ich hab ein Formular erstellt, in das der Benutzer FTP-Verbindungsdaten (Server, Benutzername und Paßwort) eingibt. Darunter ist ein "Verbindung testen"-Button, der ein Logfenster öffnen soll, das den testweisen Verbindungsaufbau mitprotokolliert. Für die FTP-Funktionen benutze ich die net-Commons des Jakarta-Projekts. Soweit, so gut...

Mein Produkt verhält sich aber nicht so, wie ich es will: Die Meldungen im Logfenster erscheinen nicht dann, wenn die FTP-Funktion aufgerufen wird, sondern *irgendwann*. Die if-Abfrage wird manchmal ignoriert, meistens bleibt das Programm aber nach der Ausgabe von "Verbinde ... Ok" stehen.

Ich tippe da auf irgendein Synchronisationsproblem, weiß aber nicht, wie ich das aganze so steuern kann, daß er erst Text ausgibt, dann die FTP-Verbindung aufbaut und dabei auf das ftp-Objekt wartet; dann erst das Ergebnis überprüft, danach den Loginversuch startet und wieder auf das Ftp-Objekt wartet, usw.

Code:
// voran geht das obligatorische addListener-Zeugs...
diag.getDisplay().syncExec( new Runnable() {
public void run() {
	boolean		b = true; // Kontrollvariable
	final	FTPClient ftp = new FTPClient();
	final	Display		d = inner.getShell().getDisplay();
	final	Shell		logwindow = new Shell
		(diag.getShell().getDisplay());
	final	StyledText	log = new StyledText    // hier drin soll mitgeschrieben werden
		(logwindow,SWT.MULTI|SWT.READ_ONLY|SWT.FILL);

	// initkram
	logwindow.setText("Verbindungstest");
	logwindow.setLayout(new FillLayout());
	logwindow.setLocation(400,400);
	logwindow.setSize(220,100);
	logwindow.open();
	logwindow.setFocus();

	// eigentliche funktion
	try {
		log.append("Verbinde ...");
		ftp.connect(addressT.getText());
	} catch(Exception e) {
		// fehlermeldung, abbrechen, usw.
		// b = false setzen für nachfolgende überprüfung
		b = false;
	}
	// wenn die verbindung fehlschlägt, wirft ftp eine Exception, durch die b = false 
	// gesetzt werden sollte (s.o.)
	if(b == true) {
		try {
			log.append(" Ok\n");
			log.append("\n\n\nAnmeldung ...");
			ftp.login(userT.getText(),passwdT.getText());
		} catch(Exception e) {
			// wieder das übliche: fehlermeldung, usw
		}
	}
}
});