• Wir präsentieren Dir heute ein Stellenangebot für einen Frontend-Entwickler Angular / Java in Braunschweig. Hier geht es zur Jobanzeige

Fehlermeldungen bei Cancel FileChooser

T

Tempranillo

Mitglied
Hallo zusammen,

ich bin leider blutiger Anfänger und hoffe Ihr könnt mir helfen. Ich habe eine Methode Speichern in der ich den FileChooser verwende, klicke ich auf Cancel erscheinen haufenweise Fehlermeldungen, wie kann ich diese Abfangen? Bin über jeden Ansatz dankbar.
Grüße Dani

Methode:
public void sichereTabelle(){//Speichert Tabelle in ein von dem User übergebenes Verzeichnis
        JFileChooser fileauswahl = new JFileChooser();
        fileauswahl.showDialog(null, "Gladiatorentabelle speichern");
        File file = fileauswahl.getSelectedFile().getAbsoluteFile(); //Verzeichnis in das die Datei geschrieben       
        System.out.println(file);

        try
        {
        FileWriter fw=new FileWriter(file);
        for(int row=0;row<kampftabelle.getRowCount();row++)
            {
            StringBuilder sb=new StringBuilder();
            for(int col=0;col<kampftabelle.getColumnCount();col++)
                {
                sb.append(kampftabelle.getValueAt(row,col)).append(";");
                }
            sb.append(System.getProperty("line.separator"));
            fw.write(sb.toString());
            }
        fw.close();
        }
    catch(Exception e)
        {
        System.out.println("Schreibfehler: "+e.getMessage());
        }
    }

Felermeldungen:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException: Cannot invoke "java.io.File.getAbsoluteFile()" because the return value of "javax.swing.JFileChooser.getSelectedFile()" is null
    at Projekt_v01.GUI_Gladiatoren.sichereTabelle(GUI_Gladiatoren.java:266)
    at Projekt_v01.GUI_Gladiatoren$4.actionPerformed(GUI_Gladiatoren.java:130)
    at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1967)
    at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2308)
    at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
    at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
    at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
    at java.desktop/java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:297)
    at java.desktop/java.awt.Component.processMouseEvent(Component.java:6614)
    at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3342)
    at java.desktop/java.awt.Component.processEvent(Component.java:6379)
    at java.desktop/java.awt.Container.processEvent(Container.java:2263)
    at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:4990)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2321)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
    at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4919)
    at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4548)
    at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4489)
    at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2307)
    at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2769)
    at java.desktop/java.awt.Component.dispatchEvent(Component.java:4822)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:772)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:95)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:743)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:391)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:742)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
 
T

Tempranillo

Mitglied
Ich habe auch schon probiert eine If Anweisung mit fileauswahl.getSelectedFile()==null zu schreiben jedoch brachte auch das leider keinen Erfolg
 
kneitzel

kneitzel

Top Contributor
Also eine Methode aufzurufen, die etwas zurück gibt und dann die Rückgabe zu ignorieren ist oft ein Zeichen für einen Fehler.

ShowDialog gibt einen int zurück, den du dir merken und dann auswerten solltest:
Da wird auch beschrieben, was da zurück gegeben wird und auf was Du da prüfen kannst:
the return state of the file chooser on popdown:
  • JFileChooser.CANCEL_OPTION
  • JFileChooser.APPROVE_OPTION
  • JFileChooser.ERROR_OPTION if an error occurs or the dialog is dismissed
 
kneitzel

kneitzel

Top Contributor
Der Aufruf von showDialog hat eine Rückgabe. Diese solltest du auswerten.

Und diese Abfrage ist doch so auch nicht zielführend mit dem &&, zum einen von der Logik her und zum anderen wirft die Zuweisung zu file doch schon die NPE, daher kommt die Prüfung schon zu spät.
 
T

Tempranillo

Mitglied
Ahhhh ich habs!!!
Ich habe einfach das getAbsolutFile entfernt, jetzt klappt es. Danke an alle !!!
 
kneitzel

kneitzel

Top Contributor
Einfach noch einmal um es zu verdeutlichen: Eine Methode, die ein Ergebnis zurück gibt, sollte man auswerten. showDialog gibt - wie ich ja verlinkt habe, ein Ergebniscode zurück. Den kann (und sollte man!) auswerten. Das könnte so aussehen:

Java:
int rc = fileauswahl.showDialog(null, "Gladiatorentabelle speichern");
if (rc == JFileChooser.APPROVE_OPTION) {
  // Anwender hat etwas ausgewählt
}

Es mag zwar sein, dass man hier jetzt keine Unterscheidung braucht zwischen Cancel oder Error Ergebnis. Und da Du eine neue Instanz erzeugt hast, wird auch kein alter Zustand übertragen oder so ... (Sprich: Angenommen DU nutzt eine JFileChooser Instanz mehrfach - ist sicher gestellt, dass die Abfrage der Property null zurück gibt, wenn bei der zweiten Nutzung bei showDialog der Anwender abgebrochen hat? Habe ich nicht geprüft, aber das wäre im Augenblick meine Erwartungshaltung, da vor Aufruf ein ausgewähltes File vorgegeben werden kann...) Aber das sind halt alles so typische Fehlerquellen, denen Du Tür und Tor öffnest.

Daher ist und war meine Anregung ganz klar: Arbeite sauber. Wenn Du etwas machst, das einen Fehler signalisieren kann: Prüfe, ob ein Fehler vorliegt.

Aber das nur noch einmal als deutlicher Hinweis für Dritte, die diesen Thread lesen. Ich freue mich für Dich @Tempranillo, dass Du für Dich eine Lösung gefunden hast.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Fehlermeldungen (Unknown Source) : / AWT, Swing, JavaFX & SWT 3
foobar Eclipse-RCP: Fehlermeldungen werden nicht angezeigt AWT, Swing, JavaFX & SWT 2
W Fehlermeldungen in JDialog AWT, Swing, JavaFX & SWT 5
J Fertige Fehlermeldungen AWT, Swing, JavaFX & SWT 2
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
Semox Swing JFileChooser: Problem Approve oder Cancel abzufangen AWT, Swing, JavaFX & SWT 7
P Mit Cancel Button ein JPanel schliessen AWT, Swing, JavaFX & SWT 12
eskimo328 JOptionPane ohne CANCEL Button AWT, Swing, JavaFX & SWT 2
S Default Button in Dialogs(Ok und Cancel) AWT, Swing, JavaFX & SWT 4
Bluedaishi FileChooser.ExtensionFilter AWT, Swing, JavaFX & SWT 4
C FileChooser Save-Dialog zeigt Files nicht an AWT, Swing, JavaFX & SWT 3
GenerationLost JavaFX FileChooser speichern ohne Zieldatei? AWT, Swing, JavaFX & SWT 12
N Swing Filechooser zweifarbig machen AWT, Swing, JavaFX & SWT 33
N Swing Zweifarbiges Layout für den Filechooser AWT, Swing, JavaFX & SWT 12
B FileChooser anpassen AWT, Swing, JavaFX & SWT 2
D Swing FileChooser mit einem neuen Rootordner AWT, Swing, JavaFX & SWT 6
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
N FileWriter mit FileChooser AWT, Swing, JavaFX & SWT 3
D Swing JOptionPane + FileChooser .. Reihenfolge wichtig!? AWT, Swing, JavaFX & SWT 7
M FileChooser Bilder auswählen AWT, Swing, JavaFX & SWT 8
kodela FileChooser mit "absolutem" Root-Verzeichnis öffnen AWT, Swing, JavaFX & SWT 2
L Filechooser File Öffnen AWT, Swing, JavaFX & SWT 4
N FileChooser in View AWT, Swing, JavaFX & SWT 3
E Swing filechooser - nur Netzwerkpfade anzeigen lassen AWT, Swing, JavaFX & SWT 14
H FileChooser und Filter AWT, Swing, JavaFX & SWT 4
F Problem mit Mehrfachauswahl bei Filechooser AWT, Swing, JavaFX & SWT 2
G Fragen zum FileChooser AWT, Swing, JavaFX & SWT 5
G FileChooser Bild Speichern AWT, Swing, JavaFX & SWT 3
G FileChooser AWT, Swing, JavaFX & SWT 5
R filechooser soll sich das Verzeichnis merken AWT, Swing, JavaFX & SWT 2
K Bilddatei mit Filechooser auswählen und anzeigen/impotieren AWT, Swing, JavaFX & SWT 18
G FileChooser - Größe (Dimension) ändern AWT, Swing, JavaFX & SWT 2
V System Look and Feel, FileChooser, Optionen einer jar-Datei AWT, Swing, JavaFX & SWT 10
M bei filechooser.showSaveDialog(null); auf Datein. zugreifen AWT, Swing, JavaFX & SWT 2
U FileChooser Layout - Threads? AWT, Swing, JavaFX & SWT 17
D FileChooser der anderen Art. AWT, Swing, JavaFX & SWT 2
C falsche Pfadangabe bei FileChooser AWT, Swing, JavaFX & SWT 7
W Vorschau mit FileChooser: Ereignis bei Datei ausgewählt? AWT, Swing, JavaFX & SWT 4
H FileChooser AWT, Swing, JavaFX & SWT 5

Ähnliche Java Themen

Anzeige

Neue Themen


Oben