Hallo zusammen.
Ich stehe vor einem Problem mit
. Und zwar kann man über unsere Anwendung eine Art Vorschau erstellen lassen. Dazu wird eine temporäre Datei erzeugt und darin ein PDF erstellt. Dies wird anschließend via
angezeigt - was auch wunderbar klappt. Problem ist aber, dass das temp. PDF nach der Anzeige wieder gelöscht werden soll.
Wenn ich nun den naiven Ansatz
mache, dann rattert die Anwendung durch, Acrobat-Reader geht auf und sagt dass er die Datei nicht finden kann ... klar, weil sie bereits gelöscht wurde.
Was ich nun bräuchte wäre ein Wartemechanismus bis der Viewer (bzw. der Prozess aus
) beendet ist.
Ein aktueller Workaround ist, dass ich die Datei immer wieder zum Schreiben öffne. Wenn der Viewer aktiv ist, dann geht das nicht und darüber warte ich. Im Code sieht das etwa wie folgt aus:
Das geht meistens, zumindest unter Windows. Aber dennoch gibt es manchmal die Situation, dass die Datei dennoch gelöscht wird, bevor der Viewer aktiv ist. Ich will das Prüfintervall jetzt auch nicht auf 2 Sekunden oder so setzen. Und wie es z.B. unter Linux funktioniert, weiß ich auch nicht (muss ich noch testen...).
Jetzt meine Frage: Gibt es hierzu eine Alternative? Das einzige was mir noch einfallen würde, wäre die
-Methode selbst nachzubauen (für PDFs), aber das plattformunabhängig zu machen dürfte bestimmt kein Kinderspiel werden.
Ich stehe vor einem Problem mit
Code:
Desktop.open()
Code:
Deskop.open()
Wenn ich nun den naiven Ansatz
Java:
generierePDF();
Desktop.open( pdfDatei );
loeschePDF();
Was ich nun bräuchte wäre ein Wartemechanismus bis der Viewer (bzw. der Prozess aus
Code:
Deskop.open()
Ein aktueller Workaround ist, dass ich die Datei immer wieder zum Schreiben öffne. Wenn der Viewer aktiv ist, dann geht das nicht und darüber warte ich. Im Code sieht das etwa wie folgt aus:
Java:
generierePDF();
Desktop.open( pdfDatei );
while (gesperrt)
{
Thread.sleep(500);
try
{
new RandomAccessFile(pdfDatei, "w");
gesperrt = false;
}
catch (FileNotFoundException exc)
{
// diese Ausnahme kommt auch, wenn die Datei gesperrt ist
gesperrt = true;
}
}
loeschePDF();
Jetzt meine Frage: Gibt es hierzu eine Alternative? Das einzige was mir noch einfallen würde, wäre die
Code:
Desktop.open()