# externes .jar file einbinden [jdic]



## un.inc (13. Sep 2005)

Hallo.

Bin Java Anfänger aber muss ein etwas "größeres" Projekt in Java schreiben, was mittlerweile auch ganz gut läuft.

Das Programm braucht für seine Funktionalität ein TrayIcon und dabei habe ich mich für jdic entschlossen.
Nun war das mit Eclipse gar kein Problem, nur da mir Java jetzt so gefällt würde ich es gerne richtig lernen und verstehen wie man es von Hand compiliert.

Ich weiss nun leider nicht wie ich es anstelle, dass das jdic.jar als Lib verwendet wird.

Im Code habe ich es richtig importiert.

```
import org.jdesktop.jdic.tray.*;
```


Es stehen noch ein paar weitere Fragen aus, aber ich nehm an es ist besser dafür einen eigenen Thread zu machen, da es sich bei den Fragen um ein praktisches Problem handelt.

Vielen Dank...


----------



## Bleiglanz (13. Sep 2005)

was ist die frage? wie du das an der konsole übersetzen kannst??

javac .fad/zur/jdic.jar MeineKlasse.java


----------



## Gast (13. Sep 2005)

Ja genau das wollte ich wissen.
Tut mir leid wenn das nicht aus meinen Post herausging.

So wie du es sagst funktioniert es bei mir aber nicht, bzw. mach ich was falsch.

javac sagt: invalid flag

jdic.jar befindet sich im gleichen Verzeichnis wie die .java Datei, hab aber einmal trotzdem den Pfad angegeben.

javac .:T:\...\jdic.jar Main.java
javac .:jdic.jar Main.java

hab auch schon den Punkt und Doppelpunkt in allen Kombinationen teilweise weggelassen, falls der für irgendetwas stehen sollte.

Gruß


----------



## Bleiglanz (13. Sep 2005)

unter Windows einen ;

also javac .;jdic.jar Main.java


----------



## KSG9|sebastian (13. Sep 2005)

java -cp c:\pfad\zur\jdic.jar MeinPackage.MeineKlasse


----------



## un.inc (13. Sep 2005)

Danke. Sebastians Beschreibung geht.

Habe es jetzt compiliert und alle Klassen in einem .jar zusammengefasst.

Bekomme beim Starten aber nun folgendes.


```
Exception in thread "main" java.lang.NoClassDefFoundError: org/
y/TrayIcon
        at Main.<init>(Main.java:229)
        at Main.main(Main.java:367)
```

Die besagten Anweisungen sind 

```
228:ImageIcon icon = new ImageIcon("trayicon.gif");
229:TrayIcon trayIcon = new TrayIcon(icon, "Happy-Security", PopUpMenu);
```


```
367: happy = new Main();
```

Das trayicon.gif existiert und liegt in selbigem Verzeichnis. Der Code müsste auch stimmen, da es ja mit Eclipse und NetBeans funktioniert hat. Allerdings da auch nur innerhalb der IDE.

Vielen Dank für die schnelle Hilfe!


----------



## thE_29 (13. Sep 2005)

Den Fehler den Bleiglanz die ganze Zeit gemacht hat, ist jener das er das -cp/classpath nie gesagt hat 

Wenn du ein ausenstehendes Jar-File hast, musst du deine KLasse mit javac -cp bla.jar deineklasse sagen und starten musst du es genauso!

also java -cp bla.jar deineklasse.class deine.klasse.main

Desweiteren, schau dir die FAQs an 

http://www.java-forum.org/de/viewtopic.php?t=14970
und dies
http://www.java-forum.org/de/viewtopic.php?t=13075


----------



## un.inc (13. Sep 2005)

Danke für deine Hilfe.

Hab mir die FAQs mal angeschaut.

meine manifest.mf sieht nun so aus

```
Manifest-Version: 1.0
Main-Class: Main
Class-Path: jdic.jar
```
 (mit leerzeile)

Hoffe das stimmt soweit.
Dann habe ich erstmal compiliert

```
javac -cp jdic.jar Main.java
```

Als nächstes habe ich ein jar erstellt und dabei alle Klassen reingepackt die durch das compilieren im Verzeichnis auftauchen(onkl. 2 unbekannte die wohl durch jdic kommen)

```
jar cvmf manifest.mf app.jar Main.class MD5Hash.class Main$geturl.class Main$1.class Main$2.class
```

Dann bin ich weiter deiner FAQ gefolgt, hab das .jar extrahiert und  das jar folgendermaßen geupdated.

```
jar -ufvm app.jar manifest.mf -C org/ /
```

Dann wird verdammt viel reingepackt doch zum Schluss bekomm ich einen Error

```
java.io.IOException: Fehler beim Schreiben in vorhandener JAR-Datei.
        at sun.tools.jar.Main.run(Main.java:177)
        at sun.tools.jar.Main.main(Main.java:903)
```

An was könnte das liegen?

Und hey. echt vielen Dank für eure Mühe! Habe schon viel über das Erstellen von jar Files gelesen, aber die Fehler sind immer so individuell, deswegen sry für die Nerverei.

Gruß,
un.inc


----------



## thE_29 (13. Sep 2005)

Wenn du es reinpacken willst, dann kannst du dir den classpath eintrag sparen!

Probier mal das 1. jar file zu starten mit java -jar app.jar (natürlich muss das jdic.jar auch im verzeichnis liegen).

Wenn du die Jar File ineinanderzupakcen schafst, brauchst du den classpath eintrag nicht!


Achja, probier mal ohne das Manifest.MF das Jar File mit dem anderen upzudaten!


----------



## un.inc (13. Sep 2005)

Also
1. ohne es ineinanderzupacken nur mit den Klassen
Main.class; MD5Hash.class, Main$geturl.class Main$1.class Main$2.class und dem manifest mit classpath eintrag.

Das jdic.jar liegt im gleichen Verzeichnis.

```
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/jdic/tra
y/internal/impl/ServiceManagerStub
        at org.jdesktop.jdic.tray.internal.ServiceManager.getService(Unknown Source)
        at org.jdesktop.jdic.tray.TrayIcon.<init>(Unknown Source)
        at Main.<init>(Main.java:229)
        at Main.main(Main.java:367)
```

2. Ineinanderpacken ohne Manifest
 Ergibt beim packen die gleiche Exception wie im vorherigen Post


----------



## un.inc (13. Sep 2005)

Falls mir keiner mehr helfen kann, könnte mir dann vlt. noch jemand erklären was mir der Fehler sagen will?

Vlt. liegts ja doch am src. Hab nur kein Eclipse mehr, aber eigentlich war es so aus dem Eclipseprojekt rauskopiert.

Oder jmd einen Vorschlag was ich jetzt machen soll?^^

Steh total doof und ratlos da... 

Gruß in den Abend!


----------



## thE_29 (14. Sep 2005)

Probier mal die Parameter umzudrehen!

Das jar dings von Sun ist das ärgste Fehlprodukt.....


Alleine wenn man die Parameter vertauscht kommen die komischten Exceptions...


----------



## un.inc (14. Sep 2005)

Das ineinanderpacken der beiden rars hat jetzt geklappt, aber bekomm beim Ausführen immernoch den gleichen Error


```
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdesktop/jdic/tra
y/internal/impl/ServiceManagerStub
        at org.jdesktop.jdic.tray.internal.ServiceManager.getService(Unknown Source)
        at org.jdesktop.jdic.tray.TrayIcon.<init>(Unknown Source)
        at Main.<init>(Main.java:229)
        at Main.main(Main.java:367)
```

Ich verstehs echt nicht. Habs nochmal mit Eclipse getestet und damit geht es wunderbar!

Falls du Lust hast(kann gut verstehen wenn nicht^^) dann kann ich dir mal den src schicken. Vlt hab ich auch was falsch eignerichtet oder so.

Bin nur gerade am verzweifeln, da es mich sehr viel Mühe gekostet hat, das bisherige Programm zu schreiben und es momentan danach aussieht als ob alles umsonst gewesen wäre.

Auf jedenfall großes Dankeschön!


----------



## thE_29 (15. Sep 2005)

Jo, schick mal auf die Adresse

behaveu<at>gmail.com


----------



## thE_29 (15. Sep 2005)

Ähm, wieso hat deine jdic.jar nur die Hälfte von der Größe als die jdic.jar die man Downloaded???

https://jdic.dev.java.net/servlets/ProjectDocumentList?folderID=3606&expandFolder=3606&folderID=3606


----------



## un.inc (15. Sep 2005)

Das weiss ich auch nicht^^

Hab dir ja nochmal ne Mail geschrieben, weil ich es selbst immernoch nicht auf die Reihe bekomm.

Aber falls das dann doch irgendwann mal der Fall sein sollte, werde ich hier die Lösung des Problems posten


----------



## thE_29 (16. Sep 2005)

Mail!

Und bezüglich den dll´s !

Unter Mac und Linux brauchst du die sogenannten .so Dateien (sind halt die dll´s unter Linux/Unix/Bsd)

Du musst halt das richtige Paket runterladen:

https://jdic.dev.java.net/servlets/ProjectDocumentList?folderID=3606&expandFolder=3606&folderID=3606

Rest steht im mail!


----------

