Desktop.open() und warten?

KrokoDiehl

Top Contributor
Hallo zusammen.

Ich stehe vor einem Problem mit
Code:
Desktop.open()
. 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
Code:
Deskop.open()
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
Java:
generierePDF();
Desktop.open( pdfDatei );
loeschePDF();
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
Code:
Deskop.open()
) 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:
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();
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
Code:
Desktop.open()
-Methode selbst nachzubauen (für PDFs), aber das plattformunabhängig zu machen dürfte bestimmt kein Kinderspiel werden.
 

hansmueller

Bekanntes Mitglied
Hallo,

meines Wissens nach gibt es keine einfache und universelle Möglichkeit zu überprüfen, ob der Viewer noch auf die PDF zugreift.

Es gibt für das File die Methode deleteOnExit(). Wenn die VM beendet wird, sollte das File dann automatisch auch gelöscht werden.
Weiß allerdings nicht wie sich das verhält, wenn der Viewer noch auf die PDF Zugriff hat.

Eine aufwendige Lösung wäre es auf den externen Viewer zu verzichten und einen eigenen Java-PDF-Viewer ins Programm zu integrieren.

MfG
hansmueller
 

Jens81

Gesperrter Benutzer
Kannst du die Datei nicht einfach in einem /tmp ordner ablegen, der bei Programmende geleert wird? So gehe ich jedenfalls mit temporären Dateien um.
Wenn die Datei dann immer noch im Zugriff ist, kann man halt nichts machen :) (sie wird dann ggfs. beim nächsten Programmende entfernt)
 

KrokoDiehl

Top Contributor
Morgen.
Danke für die Antworten. Den Aufwand eines eigenen Viewers möchte ich nicht auf mich nehmen und eigentlich auch nicht eine eigene Implementierung von
Code:
Desktop.open()
.
Die Lösung, am Ende des Programms den tmp/-Ordner zu löschen (bzw. den Inhalt), scheint mir noch am praktikabelsten.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Neumi5694 Desktop.getDesktop().open(...); Allgemeine Java-Themen 0
G Desktop open() - Problem mit Media Player Allgemeine Java-Themen 4
C Desktop.mail Problem. IO Exception: Failed to open. Allgemeine Java-Themen 3
T linux problem mit Desktop.getDesktop().open(..) Allgemeine Java-Themen 5
M bug? datei oeffnen nicht Desktop.open Allgemeine Java-Themen 3
V Probleme mit Desktop.open() ? Allgemeine Java-Themen 7
Daniel_L Fehler in Desktop.getDesktop().open()? Allgemeine Java-Themen 3
Daniel_L Desktop-Api: Problem mit open() und Umlauten Allgemeine Java-Themen 5
V Probleme mit Desktop.open() ? Allgemeine Java-Themen 4
J Integration pay Pale in eine JavaFx Desktop Application Allgemeine Java-Themen 1
B Java Programm auf virutellem Desktop laufen lassen? Allgemeine Java-Themen 1
_user_q Verknüpfung einer .jar-Datei (liegt z. B. auf dem Desktop) im Autostart-Ordner erstellen? Allgemeine Java-Themen 20
L Nach dem Login // Java Desktop Software Allgemeine Java-Themen 7
R Java-Forum als Desktop-Background Allgemeine Java-Themen 4
OnDemand Desktop-Applikation schreiben, wie daten persistent? Allgemeine Java-Themen 9
M Desktop jar File icon Ändern? Allgemeine Java-Themen 14
D Ordner auf Desktop erstellen(Pc unabhängig) Allgemeine Java-Themen 5
M Desktop Symbole ein / ausblenden Allgemeine Java-Themen 1
I Desktop browse(URI uri) Allgemeine Java-Themen 8
N Robotklasse nur auf Desktop Allgemeine Java-Themen 2
Z Desktop anzeigen + Screenshot klappt nicht Allgemeine Java-Themen 3
R Base::Config-Fehler bei Desktop-Klasse Allgemeine Java-Themen 8
G Desktop.getDesktop() und Standardprogramme Allgemeine Java-Themen 4
hdi Listener für Desktop-Veränderungen Allgemeine Java-Themen 7
S (Doppel)Klick-Verhalten vom Desktop unter Java imitieren. Allgemeine Java-Themen 5
M java.awt. Desktop browse lokale datei aus jar Allgemeine Java-Themen 4
M Desktop mail attachments Allgemeine Java-Themen 3
D Anwendung startet im Remote Desktop nicht Allgemeine Java-Themen 14
M SMS aus Desktop-Anwendung verschicken Allgemeine Java-Themen 8
W Anteil Desktop-PCs mit Java Allgemeine Java-Themen 12
R Jar-File vom Linux Desktop durch ancklicken starten? Allgemeine Java-Themen 5
M Klasse Desktop geht nicht mehr (EXCEPTION_ACCESS_VIOLATION) Allgemeine Java-Themen 9
H Mit Java Desktop abmessungen height/width abfragen Allgemeine Java-Themen 20
M eigenen Desktop erzeugen Allgemeine Java-Themen 3
ARadauer Java Desktop Framework Allgemeine Java-Themen 3
A State-of-the-Art Techniken für Desktop Programme ? Allgemeine Java-Themen 3
F Desktop Shortcut (*.lnk) erstellen? Allgemeine Java-Themen 11
M Desktop-Informationen Allgemeine Java-Themen 2
G Desktop-Icon erstellen? Allgemeine Java-Themen 5
G Programmpfad auslesen und Desktop-Icon erstellen? Allgemeine Java-Themen 3
G Java Fenster öffnen nach Iconklick(desktop) (helppls) Allgemeine Java-Themen 3
S Film vom Desktop erstellen Allgemeine Java-Themen 6
K Unterschied Core Java / Desktop Allgemeine Java-Themen 12
F Mehrere Versionen von Java auf einem W2K Desktop Allgemeine Java-Themen 3
B desktop auf monitor erweitern Allgemeine Java-Themen 22
D desktop nach ändern des hintergrunds aktualisieren Allgemeine Java-Themen 3
D Open Source Library zum erstellen von PDFs Allgemeine Java-Themen 1
C Microsoft unterstützt Open JDK Allgemeine Java-Themen 7
ms_cikar JavaOSC (Open Sound Control) Allgemeine Java-Themen 1
M Umstieg Oracle JDK zu Open JDK Allgemeine Java-Themen 20
E Open Declaration Funktioniert nicht Allgemeine Java-Themen 0
J Druckvorgang mit Java beenden (Open Office) Allgemeine Java-Themen 3
F Open source file übersetzen Phython -> Java Allgemeine Java-Themen 4
M Open Source Projekte => wo herunterladen? Allgemeine Java-Themen 2
M Open Source Projekte / source - binaries Allgemeine Java-Themen 13
I Javafx Open/Read und Tree Funktion Allgemeine Java-Themen 14
N GPIB - Fehler: Unable to open device Allgemeine Java-Themen 1
C Open Soure Projekte für parallele Programmierung Allgemeine Java-Themen 6
K associate collection with two open sessions Allgemeine Java-Themen 12
A Open Office Formeln Allgemeine Java-Themen 7
D Ersetzen in Open Office Dokument Allgemeine Java-Themen 2
A External Sort - too many open files Allgemeine Java-Themen 6
1 Java <-> Open Office Allgemeine Java-Themen 5
J Open Source Projekt anbieten - Leitfaden gesucht Allgemeine Java-Themen 3
J Too many open files Allgemeine Java-Themen 11
J Too many files open Allgemeine Java-Themen 4
E javax.comm: Suche eine open source Alternative zu rxtx Allgemeine Java-Themen 8
K "Too many open files" bei Property List Allgemeine Java-Themen 5
MasterEvil Open Office Converter Allgemeine Java-Themen 11
Y Open Source Plattformen Allgemeine Java-Themen 4
C [javax.mail] Folder not open Allgemeine Java-Themen 2
L Open Source Projekt Allgemeine Java-Themen 7
S Runtime exec unter MacOS X will nicht "open pfad" Allgemeine Java-Themen 7
M Runtime.exec() => java.io.exception: too many open files Allgemeine Java-Themen 10
J integration in Open Office Allgemeine Java-Themen 2
J Warten bis cmd Prozess fertig ist Allgemeine Java-Themen 2
M Warten vor OnClickListener Allgemeine Java-Themen 2
B Threads Multithreading Threads sollen warten Allgemeine Java-Themen 12
KaffeeFan Methoden Suche Methode um Programm kurz warten zu lassen Allgemeine Java-Themen 22
M Warten bis Variabel nicht null ist Allgemeine Java-Themen 18
chuxXo Warten auf BasicPlayer - JavaZOOM SoundAPI Allgemeine Java-Themen 8
J Java Auf anderes Programm warten Allgemeine Java-Themen 9
W Threads Threads warten lassen Allgemeine Java-Themen 5
D Simpler Timer zum warten Allgemeine Java-Themen 19
B Threads Main Thread warten auf abgebrochen Task warten lassen Allgemeine Java-Themen 25
das-mo Warten auf Event Allgemeine Java-Themen 7
L Im Thread auf Eingaben warten Allgemeine Java-Themen 3
frankred Threads Auf eine Gruppe von Threads warten Allgemeine Java-Themen 11
S Warten, bis ein Impuls von außen kommt. Allgemeine Java-Themen 2
A Warten auf shellscript Allgemeine Java-Themen 3
K Warten bis Datei geändert Allgemeine Java-Themen 2
R Programm soll warten bis eine Passwort eingabe gemacht wurde. Allgemeine Java-Themen 6
Guybrush Threepwood Warten, bis keine Taste gedrückt Allgemeine Java-Themen 11
H auf Methode warten Allgemeine Java-Themen 2
F thread warten lassen Allgemeine Java-Themen 2
N "Bitte warten"-Meldung Allgemeine Java-Themen 6
P Swing Eine Sekunde warten (Timer) Allgemeine Java-Themen 7
kodela Warten mit Java Allgemeine Java-Themen 5
L Warten bei mehreren Threads, bis Ende erreicht ist Allgemeine Java-Themen 2
S Threads eines Pools aufeinander warten lassen Allgemeine Java-Themen 11

Ähnliche Java Themen

Neue Themen


Oben