Main Menu

.jar erstellen

Started by Socke, October 29, 2012, 09:58:57 PM

Previous topic - Next topic

Socke

Hi,
wie bekomme ich eine lauffähige jar aus Eclipse wieder raus? Der Thread mit dem Jarmaker hat mir nicht geholfen. Das Ding nimmt die Hälfte nicht mit.

Aus Eclipse mit "Runnable Jar File" werden wohl die .dlls nicht gefunden.

So siehts aus in Eclipse (da läufts auch):


Diese Fehlermeldung bekomme ich.
G:\EDITOREN\kart\kart.0.0.1>java -jar kart.0.0.1.jar
Loading Texture...texturen/GrassSample2.jpg
Loading Texture...texturen/box.jpg
[ Mon Oct 29 21:52:12 CET 2012 ] - ERROR: File 'texturen/box.jpg' not found - re
placement texture used instead!
Java version is: 1.7.0_06
-> support for BufferedImage
Version helper for 1.5+ initialized!
-> using BufferedImage
Software renderer (OpenGL mode) initialized
Software renderer disposed
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
        at java.lang.reflect.Method.invoke(Unknown Source)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa
der.java:58)
Caused by: java.lang.UnsatisfiedLinkError: no lwjgl in java.library.path
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at org.lwjgl.Sys$1.run(Sys.java:73)
        at java.security.AccessController.doPrivileged(Native Method)
        at org.lwjgl.Sys.doLoadLibrary(Sys.java:66)
        at org.lwjgl.Sys.loadLibrary(Sys.java:95)
        at org.lwjgl.Sys.<clinit>(Sys.java:112)
        at org.lwjgl.opengl.Display.<clinit>(Display.java:135)
        at com.threed.jpct.GLHelper.findMode(Unknown Source)
        at com.threed.jpct.GLHelper.findMode(Unknown Source)
        at com.threed.jpct.GLHelper.init(Unknown Source)
        at com.threed.jpct.GLRenderer.init(Unknown Source)
        at com.threed.jpct.FrameBuffer.enableRenderer(Unknown Source)
        at com.threed.jpct.FrameBuffer.enableRenderer(Unknown Source)
        at com.threed.jpct.FrameBuffer.enableRenderer(Unknown Source)
        at main.WorldRenderer.renderWorld(WorldRenderer.java:77)
        at main.WorldRenderer.<init>(WorldRenderer.java:32)
        at main.KartMain.<init>(KartMain.java:12)
        at main.KartMain.main(KartMain.java:16)
        ... 5 more


Achja und so sieht die .jar aus. Ist eigentlich alles drin was man so braucht.



EgonOlsen

Ich bin nicht sicher, aber nach dem was ich so kenne und eben nochmal kurz im Netz nachgelesen habe, geht das nicht. Du müsstest die DLLs beim Starten aus dem Jar von Hand (d.h. der eigenem Code) an eine Stelle umkopieren, wo sie von der VM automatisch gefunden werden. Oder eben einzeln deployen und alles per Batch-Datei starten.

Socke

OK über die Konsole mit dem -D Parameter startet es. Müsste dann gucken ob ich mir eine Binary mit C schreibe. Batch ist hässlich  ;D

Quotejava -Djava.library.path=C:\pfadmitdendlls\lib\dll -jar meine.jar

Wäre das nicht was fürs Wiki? Ich denke ein Spiel oder was auch immer das nur aus Eclipse läuft ist recht sinnlos.

EgonOlsen

Steht eigentlich drin: http://www.jpct.net/wiki/index.php/How_to_install

Alternativ könntest du dir JET anschauen. Das aktuelle Angebot für 10€ ist wirklich günstig: http://www.jpct.net/forum2/index.php/topic,3021.0.html

Damit kannst du eine Exe aus deinem Java-Programm erzeugen und auch einen Installer erstellen lassen, wenn du das möchtest.

Socke

Exe aus jar habe ich bis jetzt immer mit JSmooth gemacht. Ist kostenlos und ging eigentlich immer. Wie das jetzt mit den DLLs ist werd ich mir mal am Donnerstag angucken. Ansonsten sind das auch nur ein paar Zeilen C++. Hab auch irgendwo rumliegen.

EgonOlsen

JET hat den Vorteil, dass es den Kram nativ kompiliert. D.h. du brauchst keine VM mehr installiert zu haben oder mitzuliefern. Dafür schleppt es die JET-Runtime mit rum, die jetzt auch nicht unbedingt viel kleiner ist... ;)

Socke

#6
Klingt interessant dieses JET.

Ich habe jetzt noch eine ganz einfache Möglichkeit gefunden die dlls zu laden. Steht so ähnlich auch auf der lwjgl Seite. Muss als erstes in der Main stehen.

System.setProperty("org.lwjgl.librarypath",new File("lib/dll/").getAbsolutePath());

Neben der .jar habe ich noch das Verzeichnis /lib/dll