Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Re: öffnen eine Dokuments (PDF) mittels Java

31 views
Skip to first unread message

Matthias Lippmann

unread,
Nov 29, 2004, 2:45:18 PM11/29/04
to
Hallo Michael,

"Michael König" schrieb

[PDF Dokument]
> Nach Erstellung möchte ich das Dokument auch anzeigen lassen. Dazu verwende
> ich das folgende Kommando
>
> Process theProcess =
> Runtime.getRuntime().exec("start " +
> theFile.getAbsolutePath()+"");
>
> Dabei ist theFile das eben erstellt Dokument.
>
> Bedauerlichweise bekomme ich jetzt eine IOException
>
> java.io.IOException: CreateProcess: start D:\temp\Nachdruck55657.pdf error=2
> at java.lang.Win32Process.create(Native Method)

Du versuchst, den Befehl "start" aufzurufen. Das ist
aber kein Prozess des Betriebssystems, sondern eine
Anweisung, die von der Shell (cmd.exe bzw. command.com)
interpretiert wird. Die lässt sich nicht direkt starten.
Du musst also erst cmd.exe aufrufen, und zwar mit dem
Schalter /c, also

Runtime.getRuntime().exec("cmd.exe /c start " + ...

--
Grüße,

Matthias Lippmann
www.lippmannsoft.de


Michael König

unread,
Nov 29, 2004, 1:30:09 PM11/29/04
to
Hallo,
ich erstelle in meinem Programm ein PDF-Dokument (das liegt jetzt als File
auf der Platte).
Das funktioniert auch prima.

Ach ja, ich arbeite unter WinXP Home mit Java 1.4.2_06 und Eclipse 3.0.

Nach Erstellung möchte ich das Dokument auch anzeigen lassen. Dazu verwende
ich das folgende Kommando

Process theProcess =
Runtime.getRuntime().exec("start " +
theFile.getAbsolutePath()+"");

Dabei ist theFile das eben erstellt Dokument.

Bedauerlichweise bekomme ich jetzt eine IOException

java.io.IOException: CreateProcess: start D:\temp\Nachdruck55657.pdf error=2
at java.lang.Win32Process.create(Native Method)

at java.lang.Win32Process.<init>(Unknown Source)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at
de.koenig.rechnung.persistenzObjekte.Rechnungsdokument.readDokumentFromDB(Rechnungsdokument.java:245)

dabei wird das Dokument in der Methode readDokumentFromDB zusammengebaut,
dort steht der oben angegebene Aufruf.

Wenn ich das Dokument durch doppelklick zu öffnen versuche, startet der
Acrobat Reader wie gewünscht und das Dokument
wird problemlos angezeigt.

Hat jemand eine Idee, was sich hinter error=2 verbergebn könnte?

Auch wenn ich das Kommando "start D:\temp\Nachdruck55657.pdf " in einer
CMD-Konsole aufzurufen versuch, gibt es keine
Probleme, sondern nur ein geöffnetes Dokument.

Für Tipps dankbar,
Michael


Nico Seessle

unread,
Nov 29, 2004, 4:35:49 PM11/29/04
to
Matthias Lippmann wrote:

> Runtime.getRuntime().exec("cmd.exe /c start " + ...

Und wenn du das Problem mit "cmd.exe" oder "command.com" vermeiden
möchtest kannst du dir http://jdic.dev.java.net anschauen - da gibt es
dann ein "Desktop.open(datei)" welches eigentlich wohl auch unter Win9x
funktionieren sollte (hoffe ich jetzt mal - sicherheitshalber in der
Doku nachschauen, Win9x habe ich nicht zum ausprobieren).

error=2 heisst übrigens (grob in Windows-Sprache übersetzt) "Befehl oder
Datei nicht gefunden" (falls das noch jemanden interessiert)

Nico

Alexander Neid

unread,
Nov 30, 2004, 3:28:14 AM11/30/04
to
Michael König wrote:
> Hallo,
> ich erstelle in meinem Programm ein PDF-Dokument (das liegt jetzt als
> File auf der Platte).
> Das funktioniert auch prima.
>
> Ach ja, ich arbeite unter WinXP Home mit Java 1.4.2_06 und Eclipse
> 3.0.
> Nach Erstellung möchte ich das Dokument auch anzeigen lassen. Dazu
> verwende ich das folgende Kommando
>
> Process theProcess =
> Runtime.getRuntime().exec("start " +
> theFile.getAbsolutePath()+"");
>

Zumindest Acrobat5 hat auch eine Kommandozeilenfunktion:
D:\Adobe\Acrobat.exe c:\Eigene Dokumente\userbla\xyz.pdf
öffnet das Dokument xyz.pdf

Teste das einfach mal mit Deiner Acrobat(Reader)-Version, somit könntest
Du die Kommando-Zeile übergehen.

Gruß
Alexander

Dieter Sebastian

unread,
Nov 30, 2004, 3:36:56 AM11/30/04
to
Michael König wrote:
> Auch wenn ich das Kommando "start D:\temp\Nachdruck55657.pdf " in einer
> CMD-Konsole aufzurufen versuch, gibt es keine
> Probleme, sondern nur ein geöffnetes Dokument.

Das hat mich gewundert und ich habs bei meinem Win2000-Rechner probiert.
Hier funktioniert das nicht! Es wird nur eine zweite Shell geöffnet, was
zu erwarten war.
Wenn das bei dir klappt, ist es eine WinXP-Eigenschaft. Du verlierst bei
Verwendung dieser Geschichte den Vorteil der "Platformübergreifenden
Programmierung". Bei Linux/Unix funktioniert das sowieso nicht und jetzt
programierst du etwas, was nur bei WinXP funktioniert und evtl. bei
anderen "Windossen" nicht.

Gruss
Dieter

Alex Tugarev

unread,
Nov 30, 2004, 4:54:06 AM11/30/04
to
Hallo,

durch dein vorhaben verlierst du ja (fast) alles an Portabilität was
Java zu bieten hat. Wenn es eine reine XP Anwendung sein soll, dann kann
man nichts gegen sagen.

Aber ich denke, die meisten Leute hier interessiert es schon, wei man
Programme schreibt, die in der gleichen Version auch auf einem Linux laufen.

Ich weiss jetzt nicht genau, was du für eine Anwendung entwickelst, und
ob das für dich zutreffend sein wird. In der "javax.jnlp.BasicService"
gibt es eine Methode showDocument, damit kannst du eine URI im Browser
darstellen. Da sowohl unter Linux, als auch unter Windows, die Brwoser
einen PDF Plugin besitzten, sollten meiner Meinung nach die Dokumente
auch angezeigt werden.

Vielleicht bringt dich das ja weiter, lass es wissen.

Gruß

Alex Tugarev

Michael König

unread,
Nov 30, 2004, 8:16:56 AM11/30/04
to

"Dieter Sebastian" <d_seb...@freenet.de> schrieb im Newsbeitrag
news:cohb90$p55$1...@newsreader2.netcologne.de...

Hallo,
sorry, stimmt, mit den Anführungszeichen startet in der Tat nur eine zweite
Shell. Wenn man die Anführungszeichen wegläßt, startet Acrobat.

Der Grund, weshalb ich nicht direkt Acrobat starte (siehe Antwort von
Alexander Neid),
war der Versuch, etwas Installationsunabhängiger zu sein. Mit dem Kommando
start wollte ich
es XP überlassen, welches Programm nun wirklich gestartet wird.

In der Tat ist alles an meiner Anwendung (ausser derm Anzeigen)
plattformuinabhängig, insofern
würde mich in der Tat interessieren, ob es eine Möglichkeit gibt, den für
die jeweilige Plattform und
Installation für PDF zuständigen Viewer zu starten.

Bevor mich jetzt jemand auf den Windows-Pfad im Aufruf aufmerksam macht, der
wurde von Java erstellt
durch das Kommando theFile.getAbsolutePath().

Gruß,
Michael


Dieter Sebastian

unread,
Nov 30, 2004, 2:36:36 PM11/30/04
to
Michael König wrote:
> In der Tat ist alles an meiner Anwendung (ausser derm Anzeigen)
> plattformuinabhängig, insofern
> würde mich in der Tat interessieren, ob es eine Möglichkeit gibt, den für
> die jeweilige Plattform und
> Installation für PDF zuständigen Viewer zu starten.

Hm, ein vielleicht gangbarer Weg ist folgender (nicht getestet):
-Aus dem File den entsprechenden URI rausziehen (java.io.File#toUri())
-Den systemweiten Standardbrowser rauskriegen, der dann hoffentlich ein
Adobe-Plugin spendiert bekommen hat (kann da wer helfen?).
-Diesem Browser kann man nun den URI übergeben und das Dokument sollte
sich öffnen.

Gruss
Dieter

0 new messages