# Aufgeführte jar-Datei, JDialog öffnet sich nicht



## daily (25. Apr 2007)

Heho,

ich habe grade aus meinem Programm eine jar-Datei gebaut. Wenn ich jetzt diese jar ausführe dann funktioniert eigentlich fast alles. Nur öffnet sich kein einziger JDialog. In Eclipse selbst funktionierts, nur nicht wenn ich die jar direkt auf der jre ausführe. Compilerlevel is Java 5.0 und die verwendete JRE ist 1.5.0_09.

Jemand ne Idee woran das liegen könnte.


----------



## The_S (25. Apr 2007)

führe das jar mal aus der Konsole mit java anstelle von javaw aus und überprüfe ob eine Exception beim öffnen des JDialogs geworfen wird. Ich vermute fast, dass du bei der Erstellung des JDialogs auf eine Jar-Interne Datei (z. B. ein Bild) zugreifen möchtest, welche vorher in Eclipse in dem entsprechenden Ordner lag!? Dateien in einem Jar-File müssen anders geladen werden, als Dateien im Dateisystem.


----------



## daily (25. Apr 2007)

Hmm seltsam. Also wenn ichs mit java von der Console aus ausführe dann gehen auch die JDialogs. Aber trotz allem hast du auch recht. Zumindest bei einer bestimmten Funktion. Hierbei bekomm ich nämlich eine Exception:


```
Exception occurred during event dispatching:
java.lang.NoClassDefFoundError: org/pdfbox/pdmodel/font/PDFont
        at de.siemens.ipns.scc.stg.view.RentArticleView$ReturnArticleControlleractionPerformed(RentArticleView.java:260)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:149)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jaa:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonMode.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:25)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonistener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:5501)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5266)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3968)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:421)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1778)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThrad.java:163)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThrad.java:153)
        at java.awt.Dialog$1.run(Dialog.java:525)
        at java.awt.Dialog$2.run(Dialog.java:553)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.awt.Dialog.show(Dialog.java:551)
        at java.awt.Component.show(Component.java:1300)
        at java.awt.Component.setVisible(Component.java:1253)
        at de.siemens.ipns.scc.stg.view.RentArticleView.<init>(RentArticleView.ava:213)
        at de.siemens.ipns.scc.stg.view.RentView$RentArticleController.actionPeformed(RentView.java:309)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:149)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.jaa:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonMode.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:25)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonistener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:5501)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3135)
        at java.awt.Component.processEvent(Component.java:5266)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3968)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:421)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892

        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1778)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchTread.java:242)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThrad.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)
```

Wie du ja sagtest muss ich Dateien in einer jar-file irgendwie anderst laden. Wie meinst du das denn konkret?[/code]


----------



## thE_29 (25. Apr 2007)

Na du hast ja bestimmt bei Eclipse andere Libraries/Jar Files hinzugefügt!

Nur die sind in deinem erstellten Jar File nicht enthalten! Tjo und wenn deine IDE (Eclipse) die braucht, dann wird die dein Jar File natürlich auch brauchen!

Dh, du schaust entweder in die FAQ da ist ein bsp wie man Jar Files zusammenstöpselt! Oder du spielst dich bei Eclipse rum (kenn mich mit dem nicht so aus) und haust alle Jar Files in deines mitrein!


----------



## The_S (25. Apr 2007)

oder du passt einfach den Classpath im Manifest deiner jar an


----------



## daily (25. Apr 2007)

Hobbit_Im_Blutrausch hat gesagt.:
			
		

> oder du passt einfach den Classpath im Manifest deiner jar an



Jo ich denk auch eher dass ich mal rausfin wie ich das mach. Kann nämlich net ganz nachvollziehen wieso die jars nicht in meiner jar enthalten sein sollen. Wenn ich selbige nämlich mal in winrar öffne SIND sie nämlich enthalten. Maybe auch deshalb weil sie in meinem Projekt im Ordner lib liegen und nicht als externe sonder als jars hinzugefügt worde sind.


----------



## thE_29 (25. Apr 2007)

Wie sind sie den enthalten?

Liegen die jar Files drinnen oder ist die Ordnerstruktur passend zu den packages darin enthalten?


----------



## daily (25. Apr 2007)

Die Jars liegen im Ordner lib
In doc ist die Javadoc
In docs sind einzelne Dokumente die ich im Programm brauche
Mit "de" beginnt mein Paketpfad


----------



## thE_29 (25. Apr 2007)

Naja, so geht das aber nicht 

Was ich meinte, wäre das die jars so wie dein projekt drinnen ist! (Also packages = Ordnerstrutkur) und nicht als jar datei in nem Ordner!

Frag mich aber nicht, ob man im class-path auf das eigene Jar Archiv zeigen kann.. Müsstest du testen!


----------



## daily (25. Apr 2007)

Hmm naja, wie ich das dann machen müsste hab ich ja in deinem Tutorial gesehn. Wobei ich das schon verdammt kompliziert finde (nicht im Sinne von schwierig). Und eigentlich wäre ich ja der Meinung dass es einfachere Wege geben müsste. Auf die Art muss man ja bei jedem Build das ganze von Hand zusammenstückeln.

Habe das mal getestet aber es hat nicht funktioniert:


```
Manifest-Version: 1.0
Sealed: true
Main-Class: de.siemens.ipns.scc.stg.controller.Main
Class-Path:
 lib/log4j-1.2.14.jar
 lib/PDFBox-07.3.jar
 lib/FontBox-0.1.0-dev.jar
```


----------



## thE_29 (25. Apr 2007)

Na so geht das nicht 

Class-Path Einträge werden hintereinander geschrieben und mit Leerzeichen getrennt!! Und nicht untereinander 

Also so: Class-Path: lib/log4j-1.2.14.jar lib/PDFBox-07.3.jar lib/FontBox-0.1.0-dev.jar


----------



## daily (25. Apr 2007)

Naja, so oder so, es geht nicht. Und die Schreibweise von mir beinhaltet auch Leerzeichen. Die werden hier nur nicht richtig angezeigt. Jede Zeile beginnt im Prinzip so: " lib/.....". Wenn ich alles hintereinander schreib wird die Zeile zu lang und mitten im Befehl umgebrochen.


----------



## thE_29 (25. Apr 2007)

Tjo, der automatische Umbruch würde schon passen, aber ich denke man kann nicht direkt auf einen Ordner im Jar File zeigen..

Vielleicht gehts irgendwie, da ja Java manchmal das irgendwie jarArchiv!/pfad/im/archiv schreibt, wenn er wo ne Exception hat..

Weiß aber die Syntax nicht 100%ig!


----------



## daily (25. Apr 2007)

Najo, ich probiers jetzt mal mit ant wie hier beschrieben.

EDIT: Genau so funktioniert es. Ist zar jetzt nicht die schönste Lösung weil man nicht "eine" Jar hat, aber fürn erstes Release wirds das tun.

EDIT: Habe nu nurnoch ein kleineres Problem:

Wie oben steht muss ich meine jar über java -jar test.jar starten weil mir sonst irgendwie (warum auch immer) keine JDialogs angezeigt werden. Nu stört es mich aber dass dabei quasi immer die Console weiterläuft. Und wenn ich sie schließe schließt sich auch das Java-Programm.

Unter Linux würde ich nu einfach "java -jar test.jar &" machen. Aber mir fällt grade partout nicht ein obs was vergleichbares unter Win gibt..

Um genau zu sein soll die batch einfach nur die jar starten und sich dann wieder schließen. Noch besser wärs natürlich wenn man sie garnicht sehen würde, aber das ist wohl unmöglich...

EDIT3: Ich liebe sich selbst lösende Probleme 

"start javaw -jar test.jar" tut das was ich will. Ja genau! javaw funktioniert aus irgendwelchen Gründen jetzt auch


----------

