Java-Gaming.org Java4K winners: [ by our judges | by the community ]         
Featured games (67)
games approved by the League of Dukes
Games in Showcase (∞)
games submitted by our members



News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  Print  
  A Game in one jar file  (Read 1411 times)
0 Members and 2 Guests are viewing this topic.
Offline sir_wojciech

JGO n00b
*

Posts: 4



« on: 2005-06-29 05:14:58 »

I've wiritten a very simple game using jogl, and I won't to put all the files in one jar (resources, jogl classes, my classes, jogl natives), so there's no playing with jre needed for the user. My game loads classes and resources correctly from the jar, but the jre doesn't see the natives? Is there a solution?

Thanks in advance!
Offline Alan_W

JGO Ninja
***

Posts: 734
Medals: 8


Java tames rock!


« Reply #1 on: 2005-06-29 05:21:05 »

You could write platform specific installers to unpack the files.  Alternatively you could use Webstart.  The native dll's still have to go in separate jars, but the user only has to only click on a link to get the whole lot to load.

Time flies like a bird. Fruit flies like a banana.
Offline sir_wojciech

JGO n00b
*

Posts: 4



« Reply #2 on: 2005-06-29 05:26:22 »

What about -Djava.libarypath how can I set it for a jar, maybe an example...
Games published by our own members! Go get 'em!
Offline Alan_W

JGO Ninja
***

Posts: 734
Medals: 8


Java tames rock!


« Reply #3 on: 2005-06-29 05:36:58 »

I don't think you can set it in the manifest.

This might be worth trying, although you still need to know where the dlls are stored.  There's some code at the bottom.  No clue whether it works though.
http://forum.java.sun.com/thread.jspa?threadID=627890&tstart=0

Also see thread
http://192.18.37.44/forums/index.php?topic=4933.0

Time flies like a bird. Fruit flies like a banana.
Offline sir_wojciech

JGO n00b
*

Posts: 4



« Reply #4 on: 2005-06-29 06:12:44 »

I tried the second thread with putting the libs in the same folder as jogl.jar and my game jar and the jvm says it cant find main class.
Offline Alan_W

JGO Ninja
***

Posts: 734
Medals: 8


Java tames rock!


« Reply #5 on: 2005-06-29 06:26:33 »

That is something that needs to go in the manifest

e.g.

1  
2  
3  
4  
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.6.2
Created-By: 1.4.2_08-b03 (Sun Microsystems Inc.)
Main-Class: pianoplayer.Main


For example: Netbeans IDE doesn't add the Main-Class attribute for you.  You need to do it yourself.

Time flies like a bird. Fruit flies like a banana.
Offline pepijnve

Sr. Member
**

Posts: 379
Medals: 1


Java games rock!


« Reply #6 on: 2005-06-29 08:11:30 »

Placing the libraries next to the jar works because on some platforms the working directory is in the default search path for dynamic libraries. IIRC under linux for instance java.library.path gets initialised to the current value of the LD_LIBRARY_PATH environment variable which may or may not contain '.'.
Here's a wild idea that might be useful. The main problem that can't really be worked around is that the underlying OS can't load dynamic libraries that are located inside a jar. So what you could do is pack the library inside your jar and extract it to some temporary location just before you want to load it.
In pseudo code you could do the following
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
// Find the library in the jar
String libName = "myLibrary";
String sysLibName = System.mapLibraryName(libName);
InputStream libIS = getClass().getClassLoader().getResourceAsStream(sysLibName);

// Create a temp file
File tempFile = new File(System.getProperty("java.io.tmpdir") + File.seperator + sysLibName);
FileOutputStream tempFileOS = new FileOutputStream(tempFile);

// Copy from libIS to tempFileOS
....

// Load the lib
Runtime.load(tempFile.getAbsolutePath());

Then of course jogl would have to ignore the fact that it can't load the library itself. Another potential pitfall is that mapLibraryName will probably return libjogl.so for both linux and solaris for instance, so you would need a way to distiguish between the two (possible using the os.name, os.arch, os.version system properties). This stuff is untested, unproven and there are probably many many other issues with this that I'm missing, but it's worth a try Cheesy
Offline sir_wojciech

JGO n00b
*

Posts: 4



« Reply #7 on: 2005-06-29 08:44:50 »

Ok problem fixed I had to add to manifest:
Class-Path: ./jogl.jar
Thanks anyways!
Pages: [1]
  Print  
 
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.16 | SMF © 2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Page created in 0.063 seconds with 20 queries.