В LWJGL (я нахожусь на mac), я делаю программу в нем, но по мере того, как я отлаживаю/запускаю свой код, он требует запуска LWJGL OS X.
То же самое касается Windows, Linux или чего-то еще, но я хочу, чтобы это было немного похоже на игру Minecraft, которая была сделана в LWJGL.
Вы начинаете игру и автоматически выбираете своих операционных систем.
Есть ли способ, которым я могу это сделать, поэтому мне не нужно переключаться вручную в разных операционных системах?
Пожалуйста, поделитесь своим источником, если вы знаете!
Посмотрите на это: http://wiki.lwjgl.org/wiki/Distributing_Your_LWJGL_Application.html.
В нем говорится, что вы можете установить путь к своим аборигенам, вызвав следующее в начале вашего основного метода:
System.setProperty("org.lwjgl.librarypath", path);
Делая некоторое обнаружение ОС, вы должны иметь возможность загружать нужных туземцев, например:
if (System.getProperty("os.name").contains("Windows")) {
// Windows
System.setProperty("org.lwjgl.librarypath", new File("lwjglFolderLocation/native/windows").getAbsolutePath());
} else if (System.getProperty("os.name").contains("Mac")) {
// Mac OS X
System.setProperty("org.lwjgl.librarypath", new File("lwjglFolderLocation/native/macosx").getAbsolutePath());
} else if (System.getProperty("os.name").contains("Linux")) {
// Linux
System.setProperty("org.lwjgl.librarypath", new File("lwjglFolderLocation/native/linux").getAbsolutePath());
} else if (System.getProperty("os.name").contains("Sun")) {
// SunOS (Solaris)
System.setProperty("org.lwjgl.librarypath", new File("lwjglFolderLocation/native/solaris").getAbsolutePath());
} else {
throw new RuntimeException("Your OS is not supported");
}
Начиная с LWJGL 3 существует SharedLibraryLoader, который обрабатывает для вас правильные туземцы. Он извлекает туземцев из банок в пути к классам, поэтому вы можете, например, объединить всех туземцев в одну банку или иметь отдельную банку для каждого нативного.
Банки должны быть на пути к классам, поэтому, когда вы распространяете свою программу как исполняемую банку, вам необходимо правильно установить атрибут манифеста Class-Path
.
По умолчанию загрузчик должен быть активным, но вы можете явно активировать его с помощью
Library.initialize();
Он работает, извлекая уроженцев из банок во временный каталог и загружая их оттуда. Если вы хотите, вы можете изменить имя и путь временного каталога через свойства Configuration
SHARED_LIBRARY_EXTRACT_DIRECTORY
и SHARED_LIBRARY_EXTRACT_PATH
.