# Eclipse jar-Export



## E99 (21. Dez 2012)

Ich möchte mein Projekt als .jar-Datei exportieren. Ich bekomme aber mit der Jardatei exceptions, die ich im workspace nicht habe, obwohl ich beim Export alles angekreuzt habe!

Gibt es eine Möglichkeit das Projekt so wie es ist zu archivieren? Die Klassen findet er. Am Classpath liegt es also nicht. Viel mehr hat er Probleme mit den Grafiken:

Can't read input File!
NullPointer

Diese Fehler kommen in eclipse nicht!!!

:shock: ahhh hilfee


----------



## Camill (21. Dez 2012)

Eine *.jar Datei kannst du mit einem beliebigen Zip-Programm öffnen. Schon mal nachgeschaut ob wircklich alles Exportiert wurde?


----------



## eRaaaa (21. Dez 2012)

Ich denke eher es liegt an dem falschen Laden der Dateien. Ein bisschen Code wäre dann sinnvoll, ansonsten einfach mal die anderen unzähligen Threads hier im Forum aufsuchen.
Oder auch mal Smartly load your properties - JavaWorld lesen, ist im Prinzip das gleiche.


----------



## E99 (21. Dez 2012)

Das ist ja das merkwürdige:

Es ist eigentlich alles vorhanden. 

Hierbei tritt die IOException:Can't read Input File! auf:


```
public static BufferedImage loadImage(String path) {
		BufferedImage img = null;
		try {
			img = ImageIO.read(new File(path));
		} catch (IOException e) {
			e.printStackTrace();
		}
		return img;
	}
```


```
img2 = AppWnd.loadImage("images//background.png");
```


----------



## eRaaaa (21. Dez 2012)

Ich schreibe es gerne nochmal, vlt hilft ja ein anderer Link:
Galileo Computing :: Java ist auch eine Insel – 17.2 Basisklassen für die Ein-/Ausgabe

Mit dem new File(..) wird das nichts im jar-File...


----------



## Bernd Hohmann (21. Dez 2012)

E99 hat gesagt.:


> Hierbei tritt die IOException:Can't read Input File! auf:



Ist das gewünschte Image im JAR gelandet? Und ich weiss jetzt so ad hoc auch nicht, ob "images//background.png" ein gültiger Pfad in einem Jar ist und ob AppWnd dort tatsächlich über eine URI liest (und nicht etwa zwangsweise im Dateisystem).

Bernd


----------



## tröööt (21. Dez 2012)

Bernd Hohmann hat gesagt.:


> ... und ob AppWnd dort tatsächlich über eine URI liest (und nicht etwa zwangsweise im Dateisystem).



File liest grundsätzlich im filesystem ! für resourcen innerhalb eines jar entweder ClassLoader.getResource() , ClassLoader.getResourceAsStream() ... oder wenn von außen über java.util.zip.* bzw java.util.jar.*


----------



## Bernd Hohmann (22. Dez 2012)

tröööt hat gesagt.:


> File liest grundsätzlich im filesystem ! für resourcen innerhalb eines jar entweder ClassLoader.getResource() , ClassLoader.getResourceAsStream() ... oder wenn von außen über java.util.zip.* bzw java.util.jar.*



Wo siehst Du bei 
	
	
	
	





```
img2 = AppWnd.loadImage("images//background.png");
```
 irgendwas mit "java.io.File"?


----------



## tröööt (22. Dez 2012)

sorry ... aber bist du wirklich SO DUMM ? was meinst du wohl von welcher "loadImage(String)" methode hier die rede sein dürfte ? ich wette mal auf folgende :



E99 hat gesagt.:


> ```
> public static BufferedImage loadImage(String path) {
> BufferedImage img = null;
> try {
> ...


diese dürfte zur klasse "AppWnd" gehören ...

und wie TO im topic sagte will er das ganze als JAR exportieren ... also ist hier ClassLoader.getResourceAsStream(String) nötig ... da "File" wie gesagt grundsätzlich im filesystem liest ... denn File selbst ist NICHT in der lage in archive "zip/jar/andere formate" reinzusehen ... das geht nur über filter der jeweiligen streams ...

wenn du jetzt in zeile 4 das "new File(String)" nicht rallst ... dann ist das aber mal ein wunderschönes eigentor ... ouh man ... wie ich mich gerade echt über diesen eindeutigen FAIL kaputtlache ...

serious ... wie ichs ja schon mal irgendwo sagte : du beweist mit deinen eigenen posts das überhaupt absolut NULL plan hast und dann auf dick machst ...
und merk dir eins : wenn du nich willst das ich dich beleidige ... da ich in deinen augen ja nur ein kind der u-18 mannschaft bin ... was , wie ich dir bereits sagte , schon seit einiger zeit nicht mehr zu trifft ... dann brauchst du dich auch nich so über mich auslassen ... ansonsten musst du damit halt leben das ich dich genauso von oben herab behandle wie du mich .. und glaub mir ... ich kann das spiel noch ne ganze weile weiter spielen ... denn wie dir unschwer entgangen sein dürfte hindern mich auch account-bans, ip-sperrungen und post-löschungen der "lieben" admins hier nicht daran hier weiter rumzunerven ... und wenn du es drauf anlegst können wir gerne weiter in diesem ton reden ...


----------



## hüteüberhüte (22. Dez 2012)

So beruhigt euch doch. Bernd ist eben einer der ganz Schlauen und tröööt ein RechtschreibGenie. Hoffentlich werde ich jetzt nur deshalb nicht gesperrt. Eine Sperre zum jetzigen Zeitpunkt wäre katastrophal. So, noch 'nen schönen Abend. Cheers!


----------



## E99 (22. Dez 2012)

Danke, danke für die vielen Antworten! Ich werde das gleich mal mit dem Classloader versuchen. 

@trööt
müsst ihr euch wirklich in diesem Thread so heruntermachen? Wenn ihr das für nötig haltet, dann bitte als PMs!


----------



## E99 (22. Dez 2012)

Das mit den Bildern funktioniert soweit.

Allerdings kann er jetzt eine Resource-jar nicht finden, obwohl diese im Ordner lib ist und die Manifestdatei so aussieht:


```
Manifest-Version: 1.0
Class-Path: . lib/jcommon-1.0.17.jar lib/jfreechart-1.0.14.jar
Main-Class: main.AppStarter
```


????????????????????????????


----------



## E99 (22. Dez 2012)

Das wäre geklärt! Ich habe in eclipse jar ausgewählt und nicht runnable jar...

aber jetzt lädt er nicht die bilder in der xmldatei. (synth laf)
uncaught Terror fetching image
Ich rufe sie so auf:

... Method=buttonbackground path= Button.PNG
kann es sein, dass  dafür Aug was in der jar beachtet werden muss?
ähnlich dem clssloader? Wie mache ich das in einer XML?


----------



## Bernd Hohmann (22. Dez 2012)

tröööt hat gesagt.:


> ... ansonsten musst du damit halt leben das ich dich genauso von oben herab behandle wie du mich ..



Damit kann ich ganz prima leben. _(Lupe auspack)_ Ach DA bist Du. 



tröööt hat gesagt.:


> und glaub mir ... ich kann das spiel noch ne ganze weile weiter spielen ... denn wie dir unschwer entgangen sein dürfte



Was auch immer Du für eine Aktion durchgezogen hast, ich habe sie nicht bemerkt. Anscheinend hast Du keine Bombe sondern nur einen kleinen Silvesterfurz gezündet.



tröööt hat gesagt.:


> hindern mich auch account-bans, ip-sperrungen und post-löschungen der "lieben" admins hier nicht daran



Du bist der Dr. Kimble von java-forum.org - immer auf der Flucht.



tröööt hat gesagt.:


> hier weiter *rumzunerven* ...



Soweit ich mich entsinne ist dieses Forum für die gegenseitige Hilfe angelegt und nicht zum herumnerven.



tröööt hat gesagt.:


> und wenn du es drauf anlegst können wir gerne weiter in diesem ton reden ...



Was juckt es eine Eiche, wenn sich eine Sau an ihr wetzt?  Ich finde Dich einfach nur putzig. Im Übrigen habe ich Dich nie als Mitglied der "u-18 mannschaft" bezeichnet da ich weiss, dass Du 21 Jahre alt bist und halte es für eine reife Leistung, sich als 21jähriger wie ein 4jähriger zu benehmen.

Bernd


----------



## Bernd Hohmann (22. Dez 2012)

E99 hat gesagt.:


> uncaught Terror fetching image



Das halte ich für Signaturfähig 

Zum eigentlichen Problem: sorry, kenne die von Dir genutzten Tools nicht. Ich würde jetzt versuchen, den Source des Tools einzubinden und im Debugger durchzutracen.

Bernd


----------



## gman (22. Dez 2012)

> aber jetzt lädt er nicht die bilder in der xmldatei.



Um welches XML-File geht es denn jetzt? Liegt die auch im Jar drin?
Und die Dateien auf die in der XML-Datei verwiesen wird?


----------



## E99 (22. Dez 2012)

Ja netter Vertipper bzw autokorrekturfehler!  

Allgemein ausgedrückt:
ich möchte in der xmldatei auf ein Bild zugreifen. 
Jetzt ist die Frage, da es nicht klappt (in der jar, in eclipse schon), ob man genau wie in Java beim Laden für Dateien in jar archiven einen besonderen Aufruf braucht.

gibt es soetwas wie den classloader auch für XML Dateien?


----------



## gman (22. Dez 2012)

> ich möchte in der xmldatei auf ein Bild zugreifen.



Welche XML-Datei denn jetzt? Was meinst du genau mit "zugreifen".
Ich nehme an in der XML-Datei stehen die Pfade zu den Bildern.
Dann musst du die Pfade auslesen und dann ganz normal darauf
zugreifen.


----------



## E99 (22. Dez 2012)

Die XML für das synth lookandfeel.

da werden Bilder für die GUI Komponenten festgelegt, in dem der Pfad übergeben wird.

ich habe da jetzt einfach den Dateinamen mit Endung stehen, da die Bilder im gleichen Ordner wie die xmldatei liegen.

was meinst du mit Pfad auslesen?


----------



## E99 (22. Dez 2012)

gman hat gesagt.:


> Ich nehme an in der XML-Datei stehen die Pfade zu den Bildern.


Stimmt also


----------



## E99 (22. Dez 2012)

Ah ich glaube ich weiß was du mit auslesen meinst 
Nein die Pfade auslesen, das machen die Klassen vom Synthlookandfeel. 

Was problematisch ist, ist dass unter den Pfaden nichts gefunden wird, obwohl die Bilder im gleichen Verzeichnis liegen...


----------



## gman (23. Dez 2012)

Laut der Doku sollte das ja so gehen. Liegen
denn die Klassen, die XML-Datei und die Bilder alle im selben Ordner bzw. Package? Weil:



> The lines inside the <state> element specify that the background of buttons should be painted using the image images/button.png. That path is relative to the Class that is passed into SynthLookAndFeel's load method.


----------



## E99 (23. Dez 2012)

Eigentlich schon


----------



## E99 (23. Dez 2012)

Aber ohne den unterordner Images/ kann es sein, dass das was ändert?


----------



## gman (23. Dez 2012)

In dem Beispiel liegen die Bilder halt in dem Unterordner. Wenn das bei dir nicht so ist musst
du den natürlich auch nicht angeben. Entscheidend ist das letzte Zitat aus der Doku. Der
Pfad ist relativ zu der Klasse welche der load-Methode übergeben wird.

Da ich selber aber noch nicht mit Synth gearbeitet habe musste dich wohl durch die Doku
arbeiten.


----------



## tröööt (25. Dez 2012)

ja ... diese IDEs sind schon was feines ... werfen sämtliche pfade komplett durch ein ander ... und bringen mit ihren build-tools mehr als nur ärger ... und dabei ist das nicht nur auf eclipse beschränkt ...

wenn es in eclipse im debug-modus läuft ... dann ist schon mal klar das so wie daten im projekt-ordner liegen mit den entsprechenden parametern die eclipse an die VM gibt funktionieren ...
also muss man diese struktur lediglich mit jars umsetzen, im manifest alles richtig eintragen und mit ClassLoader.getResource() arbeiten ...

wenn dir also irgend ein build-tool irgendeiner IDE alles zerhaut versuchs einfach mal übers terminal selbst zusammenzustecken ...

ich hatte noch nie solche probleme da ich grundsätzlich mit editor und terminal arbeite ... und daher meine pfad alle selbst unter kontrolle habe und nicht darauf hoffen muss das irgend so n build-tool versteht was ich da machen will


----------



## E99 (25. Dez 2012)

Ja ganz zum Schluss habe ich das auch gemacht, als Eclipse mit weitere Referenzdateien einfach nicht eingebunden hat, obwohl sie im workspace lagen.

dann hat es funktioniert... Naja


----------

