Я работаю над этой же проблемой в течение двух дней, но в итоге нашел ответ. Сначала я создал каталог для библиотек и установил переменную среды PATH в этот каталог. Мне не нравится забивать мой путь, хотя теперь я даю вам то, что я нашел в http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/. Моя цветопередача следует
package yourpackage;
import java.io.File;
import java.lang.reflect.Field ;
public class YourClass {
public native void print() ;
static
{
String mPath = new File (".").getAbsolutePath() ;
String langKey = "java.library.path" ;
System.setProperty (langKey, mPath) ;
// Tested both with and without the following, and worked either way.
/* try
{
Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
fieldSysPath.setAccessible(true);
fieldSysPath.set(null, null);
}
catch (NoSuchFieldException e)
{
System.err.println ("Unable to reset system path field: \n" + e + '\n') ;
}
catch (IllegalAccessException e)
{
System.err.println ("Unable to access system path after reset: \n"
+ e + '\n') ;
} */
try
{
System.loadLibrary ("YourLibrary") ;
}
catch (UnsatisfiedLinkError e)
{
System.err.println ("Native code library failed to load.\n" + e) ;
System.exit (1) ;
}
}
public static void main (String[] args)
{
YourClass yc = new YourClass() ;
yc.print();
}
}
Для приведенной выше коды библиотека DLL должна быть в той же папке, что и .java. Если вы работаете из командной строки, помните, что вы вызываете из того же каталога для javac и корневого каталога каталогов для вызова java. Таким образом, для .java будучи C: \ рабочее пространство \ yourpackage \ YourClass.java, вызовите из командной строки:
cd "C:\workspace"
java yourpackage.YourClass
Вы могли бы рассмотреть возможность использования System.load(). Он принимает полностью квалифицированный путь и игнорирует все переменные среды. Это просто: 'System.load (« C: \\ Program Files \\ My Great Program \\ libs \\ psjw.dll »);' Обратите внимание, что вы можете создать строку с контуром во время выполнения, поэтому вы можете сначала запросить такие вещи, как каталог пользователя, каталог, в котором установлена ваша программа, и так далее. Это может быть предпочтительнее loadLibrary(), поскольку вы никогда не знаете, есть ли что-то в списке мест, поиск которых уже имеет имя «psjw.dll ", который может в конечном итоге загрузить библиотеку, которую вы не знали. –
Спасибо за этот комментарий, очень полезно для выяснения основной причины проблемы с библиотекой. –