# Datei in jar öffnen



## Malta (27. Jul 2012)

Hey,

wir haben folgendes Problem, bei klick auf den Button help öffent sich eine PDF Datei, wenn wir das Programm über Eclipse laufen lassen. Nun haben wir eine .jar Datei erstellt. Wenn wir das Programm über die jar laufen lassen, können wir die PDF nicht mehr öffnen... woran kann das liegen? WIe können wir das ändern?


```
if(label.equals("help"))  		
				{
					try
					{
						java.awt.Desktop.getDesktop().open(new File("help.pdf"));
					}

						catch(Exception e)
						{}
				}
```

Vielen dank!


----------



## casi91 (27. Jul 2012)

Hallo Malta

1. niemals 

```
catch(Exception e){}
```
schreiben. Wie willst du sehen was für ein Fehler passiert, wenn du ihn nicht wenigstens ein wenig abfängst?

Du könntest dir wenigstens durch "System.out.println" den Fehler (e.getMessage) ausgeben lassen.
Wenn es eine Grafische Oberfläche ist, könntest du die Fehlermeldung auch durch einen Dialog ausgeben.

2.
Da keine Fehlermeldung vorliegt, kann ich nur schätzen.
Und mein Verdacht wäre, dass die Datei nicht gefunden wird.
Wo liegt die pdf?
Und wo liegt später die generierte .jar?


----------



## Gast2 (27. Jul 2012)

Wenn die PDF Datei im jar File liegt kannst du die so ohne weiteres nicht anzeigen, die Datei muss vorher entpackt werden.


----------



## Malta (27. Jul 2012)

Hey,

also die PDF liegt in unserem Projektordner. Die jar datei kann nacher überall liegen, sie soll weitergegeben werden können. Wi ist entpacken gemeint? Muss ich als Benutzer etwas entpacken?


----------



## Tomate_Salat (27. Jul 2012)

Du kannst dir einen Stream geben lassen mit:
[c](AufrufendeKlasse).class.getResourceAsStream("/help.pdf")[/c]

Aber das wird dir so nix bringen. Wie EikeB gesagt hast, musst du die Datei ggf. erst entpacken oder du lieferst sie so mit aus.

------


> also die PDF liegt in unserem Projektordner. Die jar datei kann nacher überall liegen, sie soll weitergegeben werden können. Wi ist entpacken gemeint? Muss ich als Benutzer etwas entpacken?


Wenn diese überall liegen kann, musst du dem Programm sagen wo. Raten ist nicht ;-). Mit entpacken ist gemeint: Wir gehen davon aus, du lieferst das PDF innerhalb der jar aus. Und deshalb musst du diese erst aus der jar entpacken um sie darstellen zu können.


----------



## kaetzacoatl (27. Jul 2012)

Der Benutzer muss nichts entpacken.
Das macht alles dein Programm:

```
InputStream in = getClass().getResourceAsStream("/res/image.png");
FileOutputStream out = new FileOutputStream("res/test/image.png");
while(in.available() > 0)out.write(in.read());
in.close();
out.close();
```


----------



## Malta (27. Jul 2012)

Danke, da ich ein Anfänger bin muss ich jetzt doch fragen: 
@kaetzacoatl: muss ich diese Zeilen in meine main-methode schreiben, oder dort wo ich die Datei öffnen möchte? Kann ich in meinem fall bei in und out immer "/help.pdf" übergeben? Danke


----------



## kaetzacoatl (27. Jul 2012)

Ich kontrolliere ein paar Zeilen davor,
ob die Datei bereits existiert,
wenn das der Fall ist überspringe ich
den Code einfach.
Der Code exportiert die Datei ja nur
aus der jar und muss deshalb nur
beim ersten Ausführen des Programms
aufgerufen werden.


----------



## mla.rue (30. Jul 2012)

Ist es nicht ein wenig sinnfrei, wenn man bei jedem Start der Anwendung (bzw wenn man das PDF öffnen will), dieses als InputStream einliest und als OutputStream irgendwo temporär speichert? Da kann man das PDF doch gleich einfach so entpackt mitliefern (also außerhalb des JARs) und regulär drauf zugreifen, ohne diesen Stream Hickhack .


----------



## Tomate_Salat (30. Jul 2012)

mla.rue hat gesagt.:


> Da kann man das PDF doch gleich einfach so entpackt mitliefern (also außerhalb des JARs) und regulär drauf zugreifen, ohne diesen Stream Hickhack


ja (oder entpackt lassen ;-)).


----------



## mla.rue (30. Jul 2012)

dann liegts aber zweimal da... einmal im JAR, und einmal ausgepackt außerhalb


----------



## Tomate_Salat (30. Jul 2012)

mla.rue hat gesagt.:


> dann liegts aber zweimal da... einmal im JAR, und einmal ausgepackt außerhalb



Und? 
Dann biete einen Installer an, der alles anlegt. Später kann der Installer gelöscht werden. Oder entferne es so aus der jar. Ehrlich: wegen dem bisschen Speicherplatz sollte es imho keine Probleme geben.


----------

