2010-12-16 2 views
2

Gelöst! Danke an alle für schnelle Antworten, das Problem war, dass ich dachte, dass, wenn Sie eine Ausnahme fangen, dass Sie noch hinzufügen müssen Ausnahmen in der Kopfzeile ^^ ziemlich dumm von mir, danke nochmal! ------------------------------------ ORIGINAL POST ------- Hallo, Ich habe eine Methode load(), diese Methode löst IOException. Ich versuche, dies zu machen:Die Verwendung von actionPerformed schlägt fehl, da eine Methode darin Ausnahmen auslösen kann

public void actionPerformed(ActionEvent e){ 
     if(e.getActionCommand().equals("Load")){ 
      load(); 
     } 
    } 

das Problem ist, sollte ich hinzufügen throws IOException auf die actionPerformed, aber wenn ich dies tun. ich einen Fehler zu sagen: „Die Klasse ist nicht abstrakt deklariert oder überschreibt nicht public void actioPerformed()

+0

Ändern Sie Ihre Frage nicht, wenn Sie eine Antwort erhalten haben. Die Antworten sind nicht länger sinnvoll. Wenn Sie Ihre Frage bearbeiten müssen, posten Sie sie unten unter einer EDIT-Zeile oder etwas. – Falmarri

+0

@ user545236 und @Falmarri, Die akzeptierte Praxis zur Beantwortung Ihrer eigenen Frage besteht darin, eine tatsächliche Antwort zu posten und die ursprüngliche Frage überhaupt nicht zu bearbeiten. Die Bearbeitung von Fragen sollte für Klarstellungen, das Hinzufügen weiterer Informationen (wie Beispielcode) usw. erfolgen. –

Antwort

2

Sie müssen also herausfinden, was Sie wollen, wenn load eine IOException löst. Die Methode AufrufactionPerformed erwartet keine IOException, so kann es nicht damit umgehen.

Können Sie damit umgehen, z.B. indem eine Fehlermeldung angezeigt wird und der Benutzer es erneut versuchen kann? Wenn ja, setzen Sie einen try/catch Block in actionPerformed und behandeln Sie es so.

Wenn Sie nicht, Sie die Ausnahme abfangen konnte und wickeln Sie es in einem RuntimeException. Das ist im Allgemeinen eine ziemlich harte Art, mit der Ausnahme umzugehen, aber in einigen Fällen ist es der beste Ansatz. Swing fängt die Ausnahme ab und protokolliert sie. In diesem Fall ist es vielleicht nicht viel hilfreich ... aber Sie können möglicherweise auch dieses Standardverhalten ändern.

+0

In Swing gibt es einen nicht abgefangenen Ausnahmebehandler, und die RuntimeException wird am Ende in der Konsole protokolliert. – Anon

+0

@Anon: Danke, werde bearbeiten, um das zu erklären. –

0

Sie müssen entweder die IOException werfen, oder die Methode umgeben, das tut (vermutlich getActionCommand()?) Mit einem try/catch

+0

Das OP sagt in seiner Frage, dass 'load()' die Methode ist, die IOExceptions auslöst. – Tim

+0

Sie haben Recht. Ich habe es falsch gelesen, die Antwort gilt immer noch. – Falmarri

1

gibt es einen Grund, warum Sie den Anruf zu load() mit einem try nicht einfach umgeben kann - catch Block. zum Beispiel:?

public void actionPerformed(ActionEvent e) { 
    if(e.getActionCommand().equals("Load")) { 
     try { 
      load(); 
     } catch(IOException e) { 
      // Handle the error here 
     } 
    } 
}

Dies setzt voraus, dass Sie ein bestimmtes Verhalten haben Sie ausführen können, wenn load() schlägt fehl load() tun? Was sollte Ihre Anwendung tun, wenn sie nicht geladen werden kann?

+0

Ich mag das :) – davs

0

Sie müssen sich überlegen, wie Sie mit IOException im Kontext von actionPerformed() umgehen.

Ein Ansatz wäre, einen try/catch-Block zu verwenden, und in der catch-Anzeige ein Dialogfeld anzuzeigen, das dem Benutzer mitteilt, dass etwas schief gelaufen ist. Besser, wenn Sie die Ausnahme in etwas Sinnvolles übersetzen können, und am besten, wenn Sie dem Benutzer eine Möglichkeit geben, sich von dem Problem zu erholen.

Übrigens, wenn Sie eine lang andauernde IO-Operation machen, sollten Sie es nicht auf dem Event-Versand-Thread tun - es wird Verzögerungen in Ihrer GUI verursachen. Anstatt eine ActionListener zwischen mehreren Aktionen zu teilen (mit der if-Bedingung, um zu sehen, welche Aktion von Ihnen aufgerufen wurde), erstellen Sie für jede eine Unterklasse von AbstractAction.

Verwandte Themen