Не уверен, что он заработает в Eclipse, НО я столкнулся с похожими проблемами при попытке создать исполняемый JAR.
Все приведенные ниже решения предполагают, что у вас есть собственные библиотеки либо вместе с файлом JAR в том же каталоге, либо в комплекте с JAR как встроенные ресурсы.
Как описывает @Dawnkeeper , вы можете просто использовать системное свойство «org.lwjgl.librarypath», чтобы указать LWJGL, где найти собственные библиотеки.
OR
Как предполагает ваша ошибка, LWJGL проверяет более распространенное системное свойство «java.library.path», чтобы найти собственные библиотеки. Вы можете установить это в командной строке, когда запускаете свой JAR следующим образом:
java -Djava.library.path=./lib -jar myApplication.jar
Однако, как я упоминал выше, мне нужен был автономный исполняемый файл JAR; Я не хотел, чтобы пользователю приходилось запускать файл JAR с аргументами командной строки. Я попытался установить это системное свойство из своего метода main
, но вскоре обнаружил, что вы не можете изменить значение этого системного свойства после инициализации среды выполнения JVM. а>. Вместо этого я написал следующий код (используя обходной путь, указанный выше), чтобы установить «java.library.path» в моем методе main
:
public static void main(String[] args) {
addLwjglNativesToJavaLibraryPathProperty();
// run code dependent on LWJGL here...
}
private static void addLwjglNativesToJavaLibraryPathProperty() {
String osDir;
if (SystemUtils.IS_OS_WINDOWS) {
osDir = "windows";
} else if (SystemUtils.IS_OS_LINUX) {
osDir = "linux";
} else if (SystemUtils.IS_OS_MAC_OSX) {
osDir = "macosx";
} else if (SystemUtils.IS_OS_SOLARIS) {
osDir = "solaris";
} else {
throw new RuntimeException("Unsupported OS: " + System.getProperty("os.name"));
}
addPathToJavaLibraryPathProperty("lib/natives/" + osDir);
}
// https://stackoverflow.com/q/5419039
private static void addPathToJavaLibraryPathProperty(String propertyValue) {
String propertyName = "java.library.path";
try {
Field field = ClassLoader.class.getDeclaredField("usr_paths");
field.setAccessible(true);
String[] paths = (String[]) field.get(null);
for (String path : paths) {
if (propertyValue.equals(path)) return;
}
String[] tmp = new String[paths.length + 1];
System.arraycopy(paths, 0, tmp, 0, paths.length);
tmp[paths.length] = propertyValue;
field.set(null, tmp);
System.setProperty(propertyName, System.getProperty(propertyName) + File.pathSeparator + propertyValue);
} catch (IllegalAccessException e) {
throw new RuntimeException("Failed to get permissions to set " + propertyName);
} catch (NoSuchFieldException e) {
throw new RuntimeException("Failed to get field handle to set " + propertyName);
}
}
Справочник по коду: https://code.google.com/p/gwahtzee/source/browse/trunk/src/main/java/com/googlecode/gwahtzee/Application.java
person
Jesse Webb
schedule
07.07.2014
lwjgl.dll
, поэтому что-то должно быть настроено неправильно. Без дополнительной информации о том, как именно настроен ваш проект, очень сложно дать вам более полезный ответ. - person Jesper   schedule 06.07.2014