Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
public void checkConnection(){
new Thread(){
@Override
public void run() {
//...
FTP ftp = new FTP(_pref.getFTPAccessData());
_ftpAccess = ftp.accessGranted();
//...
}
}.start();
}
public void loadNewData(){
new Thread(){
@Override
public void run() {
if(_ftpAccess){
//mache was
}
}
}.start();
}
die erste Prueft ob der Benutzer einen FTP-Zugang hat.
die zweite lädt bestimmte Daten runter, aber nur wenn FTP-Zugang gewährt ist.
wie schaffe ich, dass die Methode loadNewData erst dann versucht die Daten zu laden wenn die Methode checkConnection() abgeschlossen ist, dh. falls und nur falls checkConnection() läuft, soll loadNewData() warten, Problem ist, dass die beiden Methoden unabhängig von einnander gestartet werden sollen und zwar dann wenn der Benutzer zB FTP-zugangsdaten aendert, oder wenn Verzeichnis aus dem geladen werden muss geändert wird.
wäre so ein Ansatz in Ordnung? Eher nicht oder?
Java:
public void checkConnection(){
new Thread(){
@Override
public void run() {
_checkingFTP = true;
//...
FTP ftp = new FTP(_pref.getFTPAccessData());
_ftpAccess = ftp.accessGranted();
//...
_checkingFTP = false;
}
}.start();
}
public void loadNewData(){
new Thread(){
@Override
public void run() {
while (_checkingFTP) {
try {
Thread.sleep(50);
} catch (InterruptedException e) {
}
}
if(_ftpAccess){
//mache was
}
}
}.start();
}
Sieht nicht so aus. Statt ReentrantLock kannst du auch ein x-beliebiges anderes Objekt nehmen, wenn du es eh nur als Monitor in einem synchronized-Block verwendest.
Wie das mit dem ReentrantLock geht steht hier: ReentrantLock (Java 2 Platform SE 5.0)
Was soll das bringen? Vielleicht läuft jetzt Thread 2 vor Thread 1 los - oder auch nicht - oder nur manchmal.
Ich weiß zwar nicht, wieso diese nacheinander auszuführenden Methoden nicht ganz einfach in einem Thread stehen, aber wenn das so sein soll, müssen die Threads sich eben untereinander synchronisieren. Zum Beispiel mit wait-notify oder noch besser mit Locks und Conditions: http://www.java-forum.org/blogs/tfa/19-snippet-synchronisation-locks-conditions.html
Seh ich auch so .. warum nicht einfach sowas bauen:
Java:
public connectToFTP () {
// blubs
}
public void loadNewData(){
new Thread(){
@Override
public void run() {
if(_ftpAccess){
//mache was
} else {
connectToFTP();
if (!_ftpAccess) {
//throw new Exception .. oder was auch immer
}
}
}
}.start();
}
Oder hab ich irgenwas nicht richtig verstanden????:L
beide Methoden haben nichts miteinander zu tun, man darf keine Daten laden, wenn man kein FTP zugang hat, es geht nicht darum ob Verbindung besteht, sondern ob man Zugang hat. Beide Methoden koennen zu jeder Zeit automatisch aufgerufen werden und zwar dann wenn Beobachter merkt:
1. FTP daten haben sich geändert -> checkConnection();
oder
2. FTP Verzeichnis hat sich geaendert -> loadNewData();
Drei Fälle hier:
a) falls kein FTP zugang, macht loadNewData() nichts
b) falls die Methode checkConnection() arbeitet gerade, dann soll loadNewData() warten bis "checking" abgeschlossen ist -> a) | c).
c) FTP-Zugan OK, lade Daten
und ich moechte halt das all das im Hintergrund abläuft.