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  
  Modify java.library.path programmatically  (Read 541 times)
0 Members and 1 Guest are viewing this topic.
Offline ra4king

JGO Kernel
*****

Posts: 3158
Medals: 196


I'm the King!


« on: 2011-12-27 05:52:22 »

According to this (closed) bug report, java.library.path is meant to be a read-only property. However this workaround solves that problem:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
public static void addDir(String s) throws IOException {
    try {
        // This enables the java.library.path to be modified at runtime
       // From a Sun engineer at http://forums.sun.com/thread.jspa?threadID=707176
       //
       Field field = ClassLoader.class.getDeclaredField("usr_paths");
        field.setAccessible(true);
        String[] paths = (String[])field.get(null);
        for (int i = 0; i < paths.length; i++) {
            if (s.equals(paths[i])) {
                return;
            }
        }
        String[] tmp = new String[paths.length+1];
        System.arraycopy(paths,0,tmp,0,paths.length);
        tmp[paths.length] = s;
        field.set(null,tmp);
        System.setProperty("java.library.path", System.getProperty("java.library.path") + File.pathSeparator + s);
    } catch (IllegalAccessException e) {
        throw new IOException("Failed to get permissions to set library path");
    } catch (NoSuchFieldException e) {
        throw new IOException("Failed to get field handle to set library path");
    }
}


For those of you who really need to run a LWJGL application by double clicking the jar yet you want the natives in their own subfolder, this is for you Smiley

Obviously this might not be portable across JVMs.

Source: http://nicklothian.com/blog/2008/11/19/modify-javalibrarypath-at-runtime/

Offline Nate

JGO Neuromancer
****

Posts: 1063
Medals: 30


mooooo


« Reply #1 on: 2011-12-27 10:36:29 »

You can also write a classloader to find the natives and load your app using the classloader.

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.09 seconds with 20 queries.