#java #eclipse #loadlibrary #buildpath #java.library.path
Вопрос:
я использую локальный файл .jar в своем проекте eclipse, который загружает саму dll:
private static void ForceReloadLibraryPath() {
/* */ try {
/* 731 */ Field fieldSysPath = ClassLoader.class.getDeclaredField("sys_paths");
/* 732 */ fieldSysPath.setAccessible(true);
/* 733 */ fieldSysPath.set((Object)null, (Object)null);
/* */
/* 735 */ } catch (NoSuchFieldException var1) {
/* */
/* 737 */ System.out.println("Failed to adapt the java library path!");
/* */
/* 739 */ } catch (IllegalAccessException var2) {
/* */
/* 741 */ System.out.println("Failed to adapt the java library path!");
/* */ }
/* */
/* 744 */ }
/* */
/* */ static {
/* 752 */ String bitness = System.getProperty("sun.arch.data.model");
/* 753 */ String libpath = System.getProperty("java.library.path");
/* 763 */ boolean retry = false;
/* */
/* */ do {
/* 766 */ retry = false;
/* */
/* */
/* */ try {
/* 770 */ System.setProperty("java.library.path", libpath);
/* 771 */ ForceReloadLibraryPath();
/* 772 */ System.loadLibrary("AdsToJava");
/* */
/* 774 */ } catch (UnsatisfiedLinkError var6) {
/* */
/* */
/* 777 */ if (var6.getMessage().equals("no AdsToJava in java.library.path")) {
/* */
/* 779 */ System.out.println("AdsToJava.dll not found. Check your PATH environment variable!");
/* */
Я добавляю AdsToJava.dll например, свойства -> путь к сборке ->> Библиотеки ->>> Системная библиотека JRE ->>>> Расположение собственной библиотеки, но получаются сообщения об ошибках
Failed to adapt the java library path!
no AdsToJava in java.library.path:...
Первое сообщение кажется довольно незначительным — я попробовал тот же проект на другом ноутбуке, где я получаю первое сообщение, но не второе, и все работает правильно. Вторую строку я не понимаю — я добавляю правильную библиотеку dll в путь к библиотеке, он должен быть там.
Спасибо вам за любые предложения!
Комментарии:
1. В более новых версиях Java ClassLoader не имеет поля с именем
sys_path
, и даже если бы оно было, Java больше не позволит вам изменять его подобным образом.2. Вы понимаете, как все же удалось загрузить эту библиотеку? (с другого ноутбука, который тоже использует новую версию)
3. Вы всегда можете попробовать
System.load
, что позволяет вам напрямую указать полный путь.