PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SWT & Threads -- once again...



Technaton
17-05-2005, 12:08
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.



// 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
}
}
}
});