# java.libary.path



## Gast2 (24. Nov 2009)

Hallo zusammen ich würde gern die https://jdic.dev.java.net/
nutzen. ich hab die crossplatform zip runtergeladen und die jars eingebunden jetzt erkennt er die system libariers nicht und findet die auch nicht...
Muss man die wo bestimmt hinlegen damit er die sucht und findet? Oder selber laden?


```
Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: no jdic in java.library.path
	at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1682)
```


----------



## bygones (24. Nov 2009)

du kannst doch beim start den java.library.path ueber -D Option auf den Pfad setzen in dem sich die libs befinden


----------



## Gast2 (24. Nov 2009)

Ich kann auch auch der  referenced jar eine native libary geben... aber ich weiß nicht wie das dann beim bauen ist...


----------



## Gast2 (24. Nov 2009)

bygones hat gesagt.:


> du kannst doch beim start den java.library.path ueber -D Option auf den Pfad setzen in dem sich die libs befinden



ja aber dann überschreibt er ja den standard pfad ich würde ja nur gern eine zusätzlichen hinzufügen...


----------



## Guest2 (24. Nov 2009)

Moin,

Du kannst den Pfad auch zur Laufzeit dynamisch, aus Java heraus, setzen.
(Dann muss das Programm auch nicht per Kommandozeilenparameter gestartet werden.)


```
public final static void setJavaLibraryPath(String path)
			throws NoSuchFieldException, IllegalAccessException {

		final String newPath = path + File.pathSeparator + System.getProperty("java.library.path");
		System.setProperty("java.library.path", newPath);

		final Field field = (java.lang.ClassLoader.class).getDeclaredField("sys_paths");
		if (field != null) {
			field.setAccessible(true);
			field.set((java.lang.System.class).getClassLoader(), null);
		}
		
	}
```

Gruß,
Fancy


----------



## Gast2 (24. Nov 2009)

ich will eigentlich nur native sachen  laden, aber ich darf ja kein File.separator verwenden. und System.load will einen absoluten path...


----------



## Guest2 (24. Nov 2009)

Verstehe nicht genau wo das Problem ist. (Kenne aber auch das jdic nicht)

Hab das (mit anderen nativen Bibliotheken) schon mal öfter so gemacht:

1. Alle *.dlls (oder *.so, was auch immer) in ein (temporäres) Verzeichnis entpacken (kann auch zur Laufzeit aus dem JAR gemacht werden)
2. Den java.library.path (so wie oben) auf das Verzeichnis von 1. setzen
3. Die nativen Bibliotheken mit System.loadLibrary laden (ohne Pfad und ohne Endung, der findet die schon wenn 1. & 2. geklappt hat)(wenn es mehrere Dlls/SOs sind entsprechend mehrmals System.loadLibrary aufrufen (Reihenfolge kann wichtig sein!))

Aber warum darfst Du kein File.pathSeparator verwenden?

Gruß,
Fancy


----------



## Gast2 (24. Nov 2009)

habs anders gelöst ... weil System.loadLibrary das abegrprüft hat, aber egal jetzt ^^...


----------

