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:
Hat jemand eine Idee, woran das liegen könnte?
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: