Exceptions - weder catch- noch finally-Klausel funktioniert

Status
Nicht offen für weitere Antworten.

icarus2

Top Contributor
Hi

Ich habe folgende Methode geschrieben, die von einem JPanel ein Bild auf dem Desktop speichert:
[Java]
public static void writeImageToDesktop(Chessboard cb,int width, int height, int solutionNumber){

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
cb.paint(image.createGraphics());

try {
File outPutFile = new File(dirMap.get(cb.getN()).getDesktopDirectory().getAbsolutePath()+
"/solution " + solutionNumber +".jpg");
ImageIO.write(image, "jpg", outPutFile);
}catch(IOException e){
e.printStackTrace();
createDesktopDirectory( cb.getN() + " Queen Problem", cb.getN());
}finally{
exceptionalImageWriting(cb, width, height, solutionNumber);
}
}
[/Java]

Dabei kannes nun passieren, dass das outPutFile nicht gefunden werden kann. In diesem Falls wird eine ja eine FileNotFoundException geworfen, was in der IOException catch-Klausel behandel werden soll. In der catch-Klase wird eine Methode aufgerufen, die ein neues Directory erstellt. in der finally-Klausel wird schliesslich das Image neu geschrieben.

Falls diese wirklich aufgerufen wird, so soll mit folgender Methode ein neues Directory erstellt werden:
[Java]
public static void createDesktopDirectory(String directoryName, int n){

Dir dir = new Dir(n + " Queen Problem", n);
dir.getDesktopDirectory().mkdir();

dirMap.put( n, new Dir(n + " Queen Problem", n) );

}
[/Java]

Und das hier ist die andere Methode:
[Java]
public static void exceptionalImageWriting(Chessboard cb,int width, int height, int solutionNumber){

BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
cb.paint(image.createGraphics());

try {
File outPutFile = new File(dirMap.get(cb.getN()).getDesktopDirectory().getAbsolutePath()+
"/solution " + solutionNumber +".jpg");
ImageIO.write(image, "jpg", outPutFile);
}catch(IOException e){
e.printStackTrace();
return;
}
}
[/Java]


Ich denke, dass ich irgend etwas mit den Klauseln falsch mache, denn wenn eine Exception geworfen wird, bricht das Programm gleich immer mit folgender Fehlermeldung ab:
java.io.FileNotFoundException: G:\Dokumente und Einstellungen\Urs\Desktop\8 Queen Problem\solution 1.jpg (Das System kann den angegebenen Pfad nicht finden)
at java.io.RandomAccessFile.open(Native Method)
at java.io.RandomAccessFile.<init>(Unknown Source)
at javax.imageio.stream.FileImageOutputStream.<init>(Unknown Source)
at com.sun.imageio.spi.FileImageOutputStreamSpi.createOutputStreamInstance(Unknown Source)
at javax.imageio.ImageIO.createImageOutputStream(Unknown Source)
at javax.imageio.ImageIO.write(Unknown Source)
at images.ImageWriter.writeImageToDesktop(ImageWriter.java:58)
at surface.Chessboard.calulateConfigurations(Chessboard.java:434)
at surface.Chessboard.calulateConfigurations(Chessboard.java:477)
at surface.Chessboard.calulateConfigurations(Chessboard.java:477)
at surface.Chessboard.calulateConfigurations(Chessboard.java:477)
at surface.Chessboard.calulateConfigurations(Chessboard.java:477)
at surface.Chessboard.calulateConfigurations(Chessboard.java:477)
at surface.Chessboard.calulateConfigurations(Chessboard.java:477)
at surface.Chessboard.calulateConfigurations(Chessboard.java:477)
at listenerclasses.ButtonListener.run(ButtonListener.java:202)
at java.lang.Thread.run(Unknown Source)


Hat jemand eine Idee, woran das liegen könnte?
 
Zuletzt bearbeitet von einem Moderator:

eRaaaa

Top Contributor
huhu,

wieder mal nur schnell überflogen und einige fragen:

- du rufst createDesktopDirectory( cb.getN() + " Queen Problem", cb.getN()); auf
zeigst aber den code von public static boolean createNewDirectory(Chessboard cb, JCheckBoxMenuItem saveAllImages){

soll das so ?

- du sagst in createNewDirectory(...){ wird ein neues dir erstellt, wo? ich seh da nur eine for schleife die irgendwas abfragt ???:L
 

eRaaaa

Top Contributor
Java:
 public static void createDesktopDirectory(String directoryName, int n){
        
        Dir dir = new Dir(n + " Queen Problem", n);
        dir.getDesktopDirectory().mkdir();
        
        dirMap.put( n, new Dir(n + " Queen Problem", n) );
        
    }

von wo kommt Dir? das doch keine std java klasse oder?

Java:
//pfad
File path = new File("....");
//wenn pfad nicht existiert
		if(!path.exists()){
//erstelle ordner
			path.mkdirs();
		}
 
Zuletzt bearbeitet:
S

Spacerat

Gast
Dateinamen und Leerzeichen, sag ich mal...
Die gehören in Ganterpranken.
 

icarus2

Top Contributor
Dir ist eine eigens geschriebene Klasse, die ein File hät für die Directory und noch zusätzlich zwei andere Instanzvariabeln:
[Java]
class Dir {

private File desktopDirectory;
private int n;
private boolean errorMessageShown;

protected Dir(String directoryName, int n){

desktopDirectory = new File(System.getProperty("user.home") + "/Desktop/"+directoryName);
this.n = n;


}

//getter and setter methods
}
[/Java]

Es ist eigentlich folgendes Problem:
Ich habe ein Programm, das je nach Einstellung einen Ordner aus dem Desktop erzeugt. Wenn nun der Benutzer zur Laufzeit des Programms diesen Ordner löscht, findet das Programm diesen Ordner nicht mehr. Deswegen soll es einen neuen erzeugen und dann ein Bild dort reinschreiben.
Wenn der Ordner nicht auf dem Desktop ist, wird ja eine Exception geworfen. Darin soll schliesslich das ganze behandelt werden.

Eine Frage:
Gibt es eine Möglichkeit (ohne WinAPI oder JNI) herauszufinden, ob es einen Ordner mit entsprechendem Namen gibt?
z.B. sowas:
[Java]
Desktop desk = Desktop.getDesktop();
desk.hasFile("String directoryName);
[/Java]

Ich habe dazu leider nichts brauchbares finden können.
 

eRaaaa

Top Contributor
ja, also die File klasse kann halt a) abfragen ob es ein ordne rist isDirectory(), und dann gibts auch noch exists()
File (Java Platform SE 6)

die desktop klasse ist etwas ganz anderes. wieso willst du auch dann umbedingt auf dem desktop einen ordner erstellen? also ich würde das nicht so schön finde, wenn irgnedein programm einfach auf meinem desktop nen ordner erstellt :D

oder hab ich dich falsch verstanden?
 

icarus2

Top Contributor
Also ohne dass der Benutzer die Funktion nicht explizit ausnutzt, wird überhaupt nix erstellt. Ich hatte mir zuvor überlegt, ob ich vielleicht etwas machen könnte, womit man durch alle Daten gehen könnte und dann selber einen Ordner wählen könnte (könnte man glaube ich mit JTree machen, kenn ich mich aber überhaupt nicht aus mit).
Es wird nur ein Ordner erstellt, wenn der Benutzer das will.

Ist es schwer sowas zu implementieren, wie z.B. wenn man in einem "progessionellen" Programm auf "save" klickt? Da kommt ja jewils ein Fenster, wo alle Ordner drin sind.

Danke für den Tip mit der File-Klasse... habe merkwürdigerweise gar nicht daran gedacht. Ich schau mir auch nochmal an, wofür die Desktop-Klasse genau da ist.
 

icarus2

Top Contributor
So, ich habe alles implementiert und es funktioniert fast perfekt =)

Ich habe allerdings noch ein kleines Problem:
Ich kann im Ordner "Eigene Dateien" keinen neuen Ordner erstellen. Kann mir jemand sagen wiso das so ist, bzw. wie / ob ich das ändern kann?
 

eRaaaa

Top Contributor
ist mir zuvor noch nie aufgefallen aber du hast recht. standardmäßig ist dieser ordner auf read-only gesetzt. könnte man natürlich mittels:

setWritable(true);
.......
opendialog;
....
....
setWritable(false);

umgehen :D
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jose05 Umgang mit Exceptions in einen Programm Allgemeine Java-Themen 2
M Exceptions - wann / wie verwenden? Allgemeine Java-Themen 4
W Exceptions behandeln Allgemeine Java-Themen 16
Kirby.exe Exceptions erklärt Allgemeine Java-Themen 5
L Operatoren Java Reflections: Alle Methoden einer Klasse aufrufen ohne Exceptions Allgemeine Java-Themen 5
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
B Maven Keycloak library wirft exceptions nach maven package Allgemeine Java-Themen 1
J Exceptions Allgemeine Java-Themen 1
Z Java Exceptions - Auf leeres Feld prüfen Allgemeine Java-Themen 10
E Exceptions abfangen und dann Programm stoppen - aber wie? Allgemeine Java-Themen 2
L Nullpointer Exceptions werden nicht angezeigt Allgemeine Java-Themen 5
V Exceptions Allgemeine Java-Themen 2
G Exceptions mit jre 7u40 Allgemeine Java-Themen 2
S Best Practice verschiedene Exceptions fangen und neue Exception erzeugen Allgemeine Java-Themen 11
E LookAndFeel Exceptions bei UIManager.setLookAndFeel Allgemeine Java-Themen 4
W JavaDoc Runtime-Exceptions: Wie sinnvoll anzeigen? Allgemeine Java-Themen 14
C Threads und Exceptions Allgemeine Java-Themen 7
B Webstart Exceptions Allgemeine Java-Themen 7
R Threads Exceptions von Threads abfangen im ThreadPool Allgemeine Java-Themen 5
S Runtime Exceptions in eine Datei schreiben Allgemeine Java-Themen 7
G Internationalisierung von Exceptions Allgemeine Java-Themen 5
J JUnit - werfen von Exceptions testen Allgemeine Java-Themen 17
F Alle Exceptions abfangen Allgemeine Java-Themen 4
B Alle Exceptions auf einmal abfangen Allgemeine Java-Themen 4
G log4j - Behandlung nicht explizit abgefangener Exceptions Allgemeine Java-Themen 5
B Logging von Exceptions Allgemeine Java-Themen 7
G Designfrage: Exceptions in Konstruktoren Allgemeine Java-Themen 7
M Verwendung von unchecked exceptions & bereits vorhandenen exceptions was priorisieren Allgemeine Java-Themen 3
hdi Verhalten bei nicht behandelten Exceptions Allgemeine Java-Themen 2
H Exceptions und IO Allgemeine Java-Themen 17
B Exceptions? Allgemeine Java-Themen 4
D Throws Exceptions Allgemeine Java-Themen 14
M Verständnisfrage Exceptions Allgemeine Java-Themen 2
V Exceptions als Fehlerbehandlung "missbrauchen"? Allgemeine Java-Themen 10
DEvent Wie behandelt man Exceptions in Iterator? Allgemeine Java-Themen 2
J Verständnisfrage zu exceptions Allgemeine Java-Themen 3
A Junit Exceptions testen Allgemeine Java-Themen 3
R Loading-Thread und Exceptions abfangen. Allgemeine Java-Themen 4
P Exceptions dokumentieren. Allgemeine Java-Themen 6
G Exceptions weiterwerfen Allgemeine Java-Themen 2
T Generics und Exceptions Allgemeine Java-Themen 6
P Exceptions throw Allgemeine Java-Themen 6
F Wann und wie Exceptions einsetzen? Allgemeine Java-Themen 13
J Method.invoke -> Exceptions der Funktion abfangen Allgemeine Java-Themen 5
T Frage zu Exceptions Allgemeine Java-Themen 3
G Java-Exceptions werden nicht ganz angezeigt. Wo ändern? Allgemeine Java-Themen 3
J Probleme mit Exceptions Allgemeine Java-Themen 11
R Exceptions mit aktuellen Programminformationen ausgeben? Allgemeine Java-Themen 2
märliprinz com.sap.dbtech.jdbc.exceptions.JDBCDriverException Allgemeine Java-Themen 2
G Alle Exceptions loggen Allgemeine Java-Themen 4
G Frage zu Exceptions Allgemeine Java-Themen 6
M err oder alle Exceptions eines Programms abfangen Allgemeine Java-Themen 4
G Exceptions ohne Zeilennummer (Unknown Source) Allgemeine Java-Themen 8
T Exceptions im statischem Klassencode Allgemeine Java-Themen 5
R Seleium / WebDriver findet weder URL noch Title Allgemeine Java-Themen 1
D Threads wollen weder schlafen noch aufgewckt werden! Allgemeine Java-Themen 6
T Testing JUnit5: try ... catch arbeitet nicht sauber Allgemeine Java-Themen 6
M IndexOutOfBoundsException / Try-Catch Allgemeine Java-Themen 9
K Zweifacher Try-Catch Allgemeine Java-Themen 6
ralfb1105 LogManager logger schreibt nicht in Catch() Zweig Allgemeine Java-Themen 2
C try-catch Block Verständnisfrage Allgemeine Java-Themen 14
F Try/catch über ganze Klasse Allgemeine Java-Themen 9
C Unendlich Wiederholungsfehler bei try catch - Block Allgemeine Java-Themen 3
H try catch Allgemeine Java-Themen 4
V Designfrage: try-catch-throws Allgemeine Java-Themen 11
E Immer nur der Catch-Zweig Allgemeine Java-Themen 3
N String aus Try/Catch-Block übernehen Allgemeine Java-Themen 14
B Execption auf Oberfläche werfen, try-catch-Block Allgemeine Java-Themen 6
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
R return in try-catch-Blöcken Allgemeine Java-Themen 6
F try und catch Blöcke Allgemeine Java-Themen 3
Final_Striker Exceptionhandling: Richtige Verwendung des Try/Catch Blocks Allgemeine Java-Themen 14
M Try-Catch: wie wird Variable bei Exception initialisiert? Allgemeine Java-Themen 8
P Methodenaufruf von catch Allgemeine Java-Themen 2
S native methoden in try / catch ? Allgemeine Java-Themen 3
V Was tun mit "nötigen" Catch-Blöcken? Allgemeine Java-Themen 3
V Try-Catch und Code der folgt? Allgemeine Java-Themen 3
B Try/Catch in While-Schleife mit Scanner - Hilfe! Allgemeine Java-Themen 3
E try/catch Block um ganzes Programm Allgemeine Java-Themen 10
T rießiger try - catch - Block Allgemeine Java-Themen 13
M try-catch (Wie erzwing ich die catch-Anweisung)? Allgemeine Java-Themen 13
L Try ... Catch Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben