Wie PDF in jar packen und drauf zugreifen?

it-girl

Aktives Mitglied
Hallo zusammen,

ich habe ein Programm geschrieben, das bei Klick auf einen Button ein PDF öffnen soll. Im Eclipse funktioniert das auch wie es soll.
Jetzt habe ich das gesamte Projekt als Runnable Jar File exportiert und nun findet er das PDF nicht mehr und kann es nicht öffnen.
Habe schon versucht, das Jar-File mit WinRar zu öffnen und das PDF von Hand hineinzukopieren. Aber das hat auch nicht geklappt (also das Kopieren schon, nur finden tut er's trotzdem nicht).

Weiß jemand, wie ich das hinbekomme?

Danke schon mal :)

LG
IT-girl
 

jgh

Top Contributor
um dir helfen zu können, solltest du zumindest den Codeteil posten, wie du auf das pdf-File zugreifst...ansonsten ist es reine Raterei :)
 

it-girl

Aktives Mitglied
Klar, sorry, hab ich vergessen :oops:
Hier ist er:
Java:
Process p = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL Dokument.pdf);

Und das PDF liegt direkt im Projektordner, falls das wichtig ist...
 
Zuletzt bearbeitet:

Deros

Bekanntes Mitglied
sowas dürfte eher funktionieren
Java:
InputStream is = this.getClass().getClassLoader().getResourceAsStream("doku.pdf");
 

it-girl

Aktives Mitglied
Mir kommt da grad so ne Idee... Wahrscheinlich ist sie aber total blöd...
Kann man das Jar-File des Programms mit dem PDF zusammen in ein anderes Runnable Jar File tun, welches dann das "Programm-Jar" aufruft?

Also mal als Ordnerstruktur dargestellt:

Jar1 (ruft Jar2 auf)
|- Jar2 (ruft PDF auf)
|- PDF

Geht sowas? ;)

@Deros: Wie verwende ich denn diese Zeile? Habe sie grade mal anstelle meiner geposteten eingefügt, aber es tut sich nichts... Und kann damit dann das PDF aus dem Jar heraus geöffnet werden?
 

Deros

Bekanntes Mitglied
damit kommst du überhaupt erstmal an das pdf ran. Dann kannst du es z.b. in den temp-ordner streamen und dort öffnen. viel mehr möglichkeiten bleiben da wohl nicht.
 
N

nillehammer

Gast
Wenn man die hier geposteten Codes zusammenkopiert, kann es klappen:
Java:
Process p = Runtime.getRuntime().exec("rundll32 SHELL32.DLL,ShellExec_RunDLL Dokument.pdf");
Dieser Befehl erwartet das pdf als Datei. Ein pdf in einem jar ist aber keine Datei (noch nicht). Entweder Du benutzt eine Java Bibliothek, die mit InputStreams umgehen kann. Dann musst Du nur das machen, was Deros schon gepostet hat, also:
Java:
InputStream is = this.getClass().getClassLoader().getResourceAsStream("doku.pdf");
Falls Du Deinen Shell Befehl weiter benutzen willst, musst Du den Inhalt des Streams in eine temporäre Datei kopieren und dann damit Deinen Runtime-Befehl aufrufen.
 

it-girl

Aktives Mitglied
damit kommst du überhaupt erstmal an das pdf ran. Dann kannst du es z.b. in den temp-ordner streamen und dort öffnen.
Meinst du, dass ich das PDF von Hand mit ins Jar packe und dann bei Programmstart das PDF von dort in den Temp-Ordner kopiere und da dann drauf zugreifen kann?
Wie kann ich das PDF denn in den temp-Ordner kopieren/verschieben/was auch immer?

Ich hab ehrlich gesagt nicht besonders viel Ahnung was das Öffnen, Verschieben oder Ausführen von Dateien/Programmen aus meinem Javacode heraus angeht. Die Zeile, mit der ich bis jetzt auf das PDF zugreife und es öffne, habe ich in irgendeinem Forum aufgeschnappt und das hat funktioniert (in Eclipse zumindest).

Ach ja, möchte noch jemand meine Idee kommentieren? Oder ist die soo blöd, dass man da besser gar nichts zu sagt und sie gaaanz schnell vergisst? ;)

LG
 

faetzminator

Gesperrter Benutzer
Wieso willst du das PDF daraus extrahieren, wenn du es zuerst von Hand in das Jar packst :bahnhof: ? Warum nicht einfach in den gleichen Ordner wie das Jar kippen?
 

jgh

Top Contributor
ich mache das mir relativ einfach...auch wenn die Experten hier der Meinung sind, dass man das so nicht macht, aber es funktioniert immer :)

in dem Projekt lege ich mir entsprechende Ordner an: Bspw: pics, config, docs etc.
diese kopiere ich mir händisch aus dem Workspace und packe sie auf die gleiche Ebene wie das runnable jar und das gesamte Projekt wird dann noch in einen entsprechend benamten Ordner gepackt.
Dann kann man mit bspw. wie folgt darauf zugreifen:

Java:
Desktop d = Desktop.getDesktop();
			d.open(new File("docs/Dokument.pdf"));

als anhang mal, wie ich dann sowas ausliefern würde...entsprechende Ordner für pictures, configs etc mal weggelassen.
 

Anhänge

  • Testprojekt.7z
    15,5 KB · Aufrufe: 3

it-girl

Aktives Mitglied
Wieso willst du das PDF daraus extrahieren, wenn du es zuerst von Hand in das Jar packst :bahnhof: ? Warum nicht einfach in den gleichen Ordner wie das Jar kippen?
Weil ich das Programm bzw das Jar später an andere Leute weitergeben will und da finde ich es besser, wenn alles zusammen ist, also alles in einem Runnable Jar. Damit man nicht drauf achten muss, ob nun das PDF im richtigen Ordner liegt oder nicht, und trotzdem alles funktioniert.
Und einen Ordner als "Programm" weiterzugeben ist doch irgendwie.. naja, unprofessionell oder? Deshalb suche ich nun eine elegante Lösung dafür.
 

jgh

Top Contributor
weil ich dann -gerade bei bildern, oder anderen Ressourcen- nicht über
Code:
this.getClass().getClassLoader().getResourceAsStream("doku.pdf")
gehe und ich mir von einigen Experten anhören durfte, so macht man aber nicht...wenn ich mal Zeit habe, poste ich dir den Link und die übelsten Beschimpfungen :lol: dazu^^
 

it-girl

Aktives Mitglied
Na gut, dann nehm ich das ZIP :D
Ist wohl doch am einfachsten... und man kann ja nicht alles haben ;)
Dann müsste doch auch mein Code funktionieren oder? (
Code:
Process p = Runtime.getRuntime().exec( ... );
) Denn das PDF liegt ja dann im gleichen Ordner (egal welcher).

Edit: Habs grad probiert, es funktioniert ;)

Danke euch allen :)
 

jgh

Top Contributor
...
Und einen Ordner als "Programm" weiterzugeben ist doch irgendwie.. naja, unprofessionell oder? Deshalb suche ich nun eine elegante Lösung dafür.

na ja, wenn du keinen Windows-Installer schreiben willst...ist das eigentlich die übliche Art SW anzubieten. siehe u.a eclipse...da bekommst du auch einen gezippten Ordner, wenn du den entpackst...liegt da genau 1 weiterer Ordner drin, der heißt...eclipse und in diesem Ordner sind weitere Ordner, sowie Dateien (u.a. auch eclipse.exe), aber gut...wenn das unprofessionell ist, dann bleib ich gerne weiter unprofessionell.
 

faetzminator

Gesperrter Benutzer
Ja, wenn das Jar von diesem Ordner her ausgeführt wird (bei einem Doppelklick). Wenn das Jar aber von einem anderen Ort (von einem anderen Programm) ausgeführt wird, dann gehts nicht mehr.
 

Michael...

Top Contributor
Dann kann man mit bspw. wie folgt darauf zugreifen:
Java:
Desktop d = Desktop.getDesktop();
d.open(new File("docs/Dokument.pdf"));
Das kann man durchaus so machen und funktioniert sofern die Applikation direkt aus dem Verzeichnis in dem sich das Unterverzeichnis docs befindet gestartet wird - was ja bei Executable Jars der Fall ist.
jgh hat gesagt.:
weil ich dann -gerade bei bildern, oder anderen Ressourcen- nicht über this.getClass().getClassLoader().getResourceAsStream("doku.pdf") gehe
Wobei sowas sich bei Resourcen auf die man nur lesend zugreift anbietet. Es ist gekapselt, besteht keine Gefahr, dass irgendwas "verloren" geht oder unabsichtlich manipuliert wird und funktioniert garantiert immer.
 

it-girl

Aktives Mitglied
na ja, wenn du keinen Windows-Installer schreiben willst...ist das eigentlich die übliche Art SW anzubieten. siehe u.a eclipse...da bekommst du auch einen gezippten Ordner, wenn du den entpackst...liegt da genau 1 weiterer Ordner drin, der heißt...eclipse und in diesem Ordner sind weitere Ordner, sowie Dateien (u.a. auch eclipse.exe), aber gut...wenn das unprofessionell ist, dann bleib ich gerne weiter unprofessionell.

Meine Aussage war aber, dass ich es unprofessionell finde, einen *normalen* Ordner weiterzugeben, nicht ein ZIP.
 
Zuletzt bearbeitet:

jgh

Top Contributor
ob er gezippt, oder normal ist...lässt imho mehr Rückschlüsse darüber zu, wie das "Programm" verteilt wird, als über die Professionalität der SW...aber gut, ich habe keine Lust mehr^^
Du hast Recht, ich habe Ruhe...nichts für ungut :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Objekte in einen String packen und wieder laden Allgemeine Java-Themen 5
T Objekt in Array packen Allgemeine Java-Themen 6
M Quadrate in Rechteck packen Allgemeine Java-Themen 17
Y Liste in Stream Packen Allgemeine Java-Themen 1
J Java-Code in DLL packen Allgemeine Java-Themen 5
X HTTP Auslesen der Ergebnisse von einer Webseite und in eine Liste packen Allgemeine Java-Themen 1
T Dateien zur Laufzeit in Java-Programm packen? Allgemeine Java-Themen 3
J libs mit maven in jar packen Allgemeine Java-Themen 2
L Objekte in Liste packen Allgemeine Java-Themen 2
H Dateien in JAR packen Allgemeine Java-Themen 4
G JAR packen? Allgemeine Java-Themen 6
J Applet in JAR packen - was muss in main() stehen? Allgemeine Java-Themen 12
A CSV-Datei (Spalt A -> Excel) in Array packen und auslesen Allgemeine Java-Themen 25
E JFreeChart jars mit in meine Jar packen Allgemeine Java-Themen 6
E Nach Packen in Jar ist Sound nur noch abgehackt zu hören Allgemeine Java-Themen 2
N int[] referenzen in ein Array packen, brauche Hilfe. Allgemeine Java-Themen 7
O Externe Jars in eigene JAr packen in Eclipse Allgemeine Java-Themen 5
M Packen mit Java Allgemeine Java-Themen 2
Q Icons (jpg,gif) in EXE packen. Allgemeine Java-Themen 2
S JTree selektion erkennen und drauf reagieren Allgemeine Java-Themen 2
berserkerdq2 Ein Gamepanel sei in 60x60 Pixel Quadrate aufgeteilt und isgesamt 600 Pixel breit & 300 Pixel hoch. Wie auf Quadrate zugreifen? Allgemeine Java-Themen 5
d.lumpi Aus Einer Klasse auf ein Objekt einer anderen Klasse Zugreifen Allgemeine Java-Themen 1
B Datei/Ordner auf Server zugreifen/erstellen Allgemeine Java-Themen 2
L Kapselung Auf DLL zugreifen Allgemeine Java-Themen 4
sascha-sphw Auf GoPro Speicher zugreifen Allgemeine Java-Themen 10
ReinerCoder auf Klassen innerhalb eines package zugreifen Allgemeine Java-Themen 22
K Auf Dateiverzeichnis extern zugreifen (evtl über XML??) Allgemeine Java-Themen 22
K Best Practice Auf die Klasse zugreifen im erzeugten ActionListener Allgemeine Java-Themen 2
Sin137 OOP Auf JPanel zugreifen, das einem JTabbePane hinzugefügt worden ist Allgemeine Java-Themen 10
P Threads Java Zugreifen Allgemeine Java-Themen 6
B Auf Web-API zugreifen Allgemeine Java-Themen 2
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
A Datentypen Generics: Wie am besten auf Typparameter zugreifen Allgemeine Java-Themen 2
D Vererbung Wie auf Subklasse zugreifen + übergeben? Allgemeine Java-Themen 5
C Mit java auf Firefox zugreifen Allgemeine Java-Themen 7
T Mit Java auf die Konsole eines Process-Objekts zugreifen Allgemeine Java-Themen 10
U JNI -> Inhalt dll zugreifen Allgemeine Java-Themen 5
P Variablen Auf durch for-Schleife generierte JComboBox zugreifen Allgemeine Java-Themen 3
H JavaFX Von einer Methode auf stage-Objekt zugreifen Allgemeine Java-Themen 3
E Auf Java-Objekt aus anderer Instanz zugreifen Allgemeine Java-Themen 26
G Linux/C++/Pthreads auf JVM zugreifen, thread safe? Allgemeine Java-Themen 10
A OOP Wie auf Objekt der Superklasse zugreifen? Allgemeine Java-Themen 6
D auf Bilder im Jar-Archiv zugreifen Allgemeine Java-Themen 11
S auf public void Methode zugreifen ohne static Allgemeine Java-Themen 11
Gossi Mit Java auf Linux- & Windowssysteme zugreifen? Allgemeine Java-Themen 4
M Wie auf Webcam zugreifen= Allgemeine Java-Themen 6
P aus Thread auf Form zugreifen Allgemeine Java-Themen 9
K Auf Methoden der Runnable Klasse zugreifen Allgemeine Java-Themen 2
T Mit Java auf Dateien zugreifen die auf einem Server liegen Allgemeine Java-Themen 5
D von einer Klasse auf Komponente in anderer Klasse zugreifen Allgemeine Java-Themen 5
ruutaiokwu auf priv. konstruktor von "aussen" zugreifen? Allgemeine Java-Themen 4
StupidAttack Auf Cookies in Mozilla Firefox zugreifen Allgemeine Java-Themen 3
A Auf Steuerelemente eines Dialoges zugreifen Allgemeine Java-Themen 2
A Wie zur Laufzeit auf Objekte zugreifen Allgemeine Java-Themen 7
P In Sourcecode auf Testcode zugreifen Allgemeine Java-Themen 12
F mit Applet auf .htaccess geschützte Dateien zugreifen Allgemeine Java-Themen 3
S Swing mit JEditorPane per HTML auf Bilder in JAR zugreifen. Allgemeine Java-Themen 3
P [Regulärer Ausdruck] Auf Gruppe mit Quantifier separat zugreifen? Allgemeine Java-Themen 2
T JNI -> auf Java-Variablen etc zugreifen Allgemeine Java-Themen 6
S auf freigebene Ordner zugreifen Allgemeine Java-Themen 6
Balbes Auf Datei im Dateisystem aus einem jar-Archiv zugreifen Allgemeine Java-Themen 4
T Mit JNI von C++ auf ein laufendes Java-Programm zugreifen Allgemeine Java-Themen 10
U auf Objekte mit variablem Namen zugreifen Allgemeine Java-Themen 4
L Aus Java auf Browser Formularfelder zugreifen Allgemeine Java-Themen 9
badfish Inerhalb der [void main] auf ein Objekt der [protected void] zugreifen Allgemeine Java-Themen 13
C Auf Oberflaechen Elemente zugreifen Allgemeine Java-Themen 8
T Mit 2 Klassen auf selben Thread zugreifen Allgemeine Java-Themen 11
A Auf Methode in actionPerformed zugreifen Allgemeine Java-Themen 3
T Mit Java Programm auf Firefox zugreifen Allgemeine Java-Themen 2
S Auf Array aus Methode zugreifen Allgemeine Java-Themen 3
MQue aus einem Applet auf Word zugreifen Allgemeine Java-Themen 3
D Auf annotierte Felder oder Methoden zugreifen Allgemeine Java-Themen 4
C JNI: Auf ArrayList und Klassen zugreifen Allgemeine Java-Themen 13
A kann nicht auf properties außerhalb jar zugreifen Allgemeine Java-Themen 3
H Kann ein Runnable Objekt auf das Thread Objekt zugreifen? Allgemeine Java-Themen 4
G auf variable in anderer class zugreifen Allgemeine Java-Themen 2
V [solved]Von Java Prog über ein JSP/Servlet auf DB zugreifen Allgemeine Java-Themen 3
W Auf markierten Text zugreifen? Allgemeine Java-Themen 5
J SMS zugreifen Allgemeine Java-Themen 2
S In Subklasse auf private Variablen zugreifen Allgemeine Java-Themen 4
H Auf ConsoleWindowClass zugreifen? Allgemeine Java-Themen 3
T auf Klasse in Default package zugreifen Allgemeine Java-Themen 10
G per Reflection auf private Klassenattribute zugreifen? Allgemeine Java-Themen 9
F Zugreifen auf vorher erzeugte Zufallszahl! Allgemeine Java-Themen 4
M mit java auf bestehende progs zugreifen Allgemeine Java-Themen 3
D Auf Laufwerk bzw. Ordner auf einem Server zugreifen Allgemeine Java-Themen 7
M auf files des packages zugreifen Allgemeine Java-Themen 2
N Auf Bilder / Dateien innerhalb eines jar-Archives zugreifen Allgemeine Java-Themen 2
J Netbeans: wie auf grafische elemente zugreifen, andere Datei Allgemeine Java-Themen 2
G Mit Java auf windows 2003 userrechte zugreifen geht sowas ? Allgemeine Java-Themen 2
K Mit Jar-File auf "External JAR´s" zugreifen - Clas Allgemeine Java-Themen 2
S Aufs Handy zugreifen Allgemeine Java-Themen 2
B Fehler:Mein Applet kann nicht auf zwei txt-Dateien zugreifen Allgemeine Java-Themen 2
G mit Java auf Adressliste von MS Outlook zugreifen. Allgemeine Java-Themen 3
M aus einer Unterklasse auf den parent zugreifen Allgemeine Java-Themen 2
M auf werte eines objektes zugreifen Allgemeine Java-Themen 5
O String übergeben ist name eines JTextField wie zugreifen Allgemeine Java-Themen 9
T JNI: Wie in C auf ein Java-Objekt zugreifen ? Allgemeine Java-Themen 5
K auf Internetseiten zugreifen / Links verfolgen Allgemeine Java-Themen 2
P Kann man mit Java auf Windows Dienste zugreifen bzw steuern? Allgemeine Java-Themen 7

Ähnliche Java Themen

Neue Themen


Oben