G
Guest
Gast
Hallo.
Ich habe folgenden Code:
Es handelt sich um die Methode meines Verzeichnisbrowsers, die eine List mit den Verzeichnissen/Roots des Dateisystems anzeigt. Mein Handy (SE W300) und der Emulator fragen bei jedem Aufruf einer Zugriffsmethode (Connector.open() etc.) um erlaubnis. Wird die vom Benutzer abgelehnt schmeißen diese Methode eine SecurityException. Die fange ich ab und wechsele zu einem Form (new ExitForm(...)) und zeige noch einen Alert an (meine showError(...)-Methode). daddy ist das Erzeuger-MIDlet meines Verzeichnisbrowsers, habe ich beim Erzeugen übergeben.
browseDir(ROOT) wird zunächst automatisch aufgerufen (eigener Thread). Der Benutzer sieht die Rootliste oder, wenn er die Rechteabfrage verneint erscheint ein Alert und danach mein ExitForm. Bis hierhin alles ok. Danach wird die Methode über das command "enter" aufgerufen. Ab da geht es schief: Verneint der User die Rechteabfrage bei diesem 2. oder einem weiteren Durchlauf, also wenn er schonmal eine List (eben die mit den Roots) gesehen hat, dann kann ich nicht zum ExitForm wechseln. Stattdessen fällt er nach dem Alert auf die List mit den Roots zurück.
Zusammenfassend: Ich fange die SecurityException erfolgreich ab, denn das Alert wird gezeigt (showError()). Aber die Display.setCurrent(new ExitForm(...)) scheint überhaupt keine Wirkung zu haben, wenn die Methode zuvor schon einmal ohne Exception-Behandlung durchgelaufen ist. Auch wirft sie selbst keine Exception - das habe ich gecheckt.
Kann das jemand erklären?
Ich habe folgenden Code:
Code:
private void browseDir(String dirName){
Enumeration en;
FileConnection currDir = null;
List browser;
try{
browser = new List(dirName, List.IMPLICIT);
if (currDirName.equals(ROOT)){
en = FileSystemRegistry.listRoots();
canWrite = false; //in ROOT nicht schreiben
}else{
currDir = (FileConnection)Connector.open(PREFIX + dirName);
en = currDir.list();
canWrite = currDir.canWrite(); //testen, ob beschreibbar
currDir.close();
browser.append("..",null);//erstes Element
}
while (en.hasMoreElements()) {
String fileName = (String)en.nextElement();
// nur Verzeichnisse auflisten!
if (fileName.charAt(fileName.length() - 1) == SEPARATOR) browser.append(fileName, null);
}
browser.setSelectCommand(enter);
if(canWrite){
browser.addCommand(choose);
}
browser.setCommandListener(this);
Display.getDisplay(daddy).setCurrent(browser);
}catch(SecurityException se){
se.printStackTrace();
Display.getDisplay(daddy).setCurrent(new ExitForm(daddy,"Bitte stellen Sie sicher, dass...blabla")); //<-
showError("Verzeichnis konnte nicht geöffnet werden.");
}
catch(Exception e){
e.printStackTrace();
}
}//browseDir()
Es handelt sich um die Methode meines Verzeichnisbrowsers, die eine List mit den Verzeichnissen/Roots des Dateisystems anzeigt. Mein Handy (SE W300) und der Emulator fragen bei jedem Aufruf einer Zugriffsmethode (Connector.open() etc.) um erlaubnis. Wird die vom Benutzer abgelehnt schmeißen diese Methode eine SecurityException. Die fange ich ab und wechsele zu einem Form (new ExitForm(...)) und zeige noch einen Alert an (meine showError(...)-Methode). daddy ist das Erzeuger-MIDlet meines Verzeichnisbrowsers, habe ich beim Erzeugen übergeben.
browseDir(ROOT) wird zunächst automatisch aufgerufen (eigener Thread). Der Benutzer sieht die Rootliste oder, wenn er die Rechteabfrage verneint erscheint ein Alert und danach mein ExitForm. Bis hierhin alles ok. Danach wird die Methode über das command "enter" aufgerufen. Ab da geht es schief: Verneint der User die Rechteabfrage bei diesem 2. oder einem weiteren Durchlauf, also wenn er schonmal eine List (eben die mit den Roots) gesehen hat, dann kann ich nicht zum ExitForm wechseln. Stattdessen fällt er nach dem Alert auf die List mit den Roots zurück.
Zusammenfassend: Ich fange die SecurityException erfolgreich ab, denn das Alert wird gezeigt (showError()). Aber die Display.setCurrent(new ExitForm(...)) scheint überhaupt keine Wirkung zu haben, wenn die Methode zuvor schon einmal ohne Exception-Behandlung durchgelaufen ist. Auch wirft sie selbst keine Exception - das habe ich gecheckt.
Kann das jemand erklären?