PDF-File bleibt geöffnet

19/02/2014 - 09:34 von Andi Riese | Report spam
Hallo,
ich habe ein Problem bei dem ich nicht weiter komme.

Ich lese mit untem stehendem Code eine PDF-Datei ein und zeige sie anschließend an mit Hilfe eines JLabel.setIcon(...) (siehe unten) an. Funktioniert alles.
Anschließend möchte die Datei umbenennen mit File.renameTo.

Leider bleibt die Datei geöffnet bis die App. beendet wird und làßt sich daher nicht umbenennen - auch nicht unter Windows.
Ich habe versucht alle Verweise auf den PDF-File zu zerstören, bzw. ein close() zu machen. Hilft alles nix.

Vielleicht kann mit jmd. einen Tipp geben. Danke im Voraus!
Andi



//Auszug aus Programmcode:

final PDFFile pdfFile = Io.lesenPdf(pdfPfad);
pdfPage = pdfFile.getPage(seite);

final Rectangle rect = new Rectangle(0, 0, (int) pdfPage.getBBox()
.getWidth(), (int) pdfPage.getBBox().getHeight());
setPreferredSize(new Dimension(rect.width, rect.height));

final Image img = pdfPage.getImage(rect.width, rect.height, rect, null,
true, // Hintergrund weiß
true // synchron, true
);
setIcon(new ImageIcon(img));


//und hier die Io.lesenPDF:


public static final PDFFile lesenPdf(final File f) {

try (final RandomAccessFile raf = new RandomAccessFile(f, "r");
final FileChannel channel = raf.getChannel()) {
ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0,
channel.size());
Gb.s(f.getAbsolutePath() + " lesen");
final PDFFile pdfFile = new PDFFile(buf);
Gb.ok();
raf.close();
channel.close();
buf = null;
return pdfFile;
} catch (final FileNotFoundException e) {
Gb.f(f.getAbsolutePath() + " nicht gefunden!");
return null;
} catch (final IOException e) {
Gb.f(e);
return null;
}

}
 

Lesen sie die antworten

#1 Heiner Kücker
19/02/2014 - 12:37 | Warnen spam
Andi Riese:
Leider bleibt die Datei geöffnet bis die App. beendet wird und
làßt sich daher nicht umbenennen - auch nicht unter Windows.

Ich habe versucht alle Verweise auf den PDF-File zu zerstören,
bzw. ein close() zu machen. Hilft alles nix.



Versuch doch mal die alte Stream-API,
es gibt in Deinem Anwendungsfall keinen speziellen Grund
für RandomAccessFile, FileChannel und ByteBuffer.

Grüße
Heiner

Ähnliche fragen