JInput не обновляет / не обновляет
Я использую JInput для управления геймпадом на Win7 64bit. Я столкнулся с проблемой: как только я получаю DefaultEnvironment
список контроллеров не обновляется и не обновляется.
for (Controller c : ControllerEnvironment.getDefaultEnvironment().getControllers()) {
if (c.getType() == Controller.Type.GAMEPAD) {
pluggedControllers.put(c);
}
}
Так что, если контроллер подключен или отключен после того, как я позвонил ControllerEnvironment.getDefaultEnvironment()
ничего не меняется. Список по-прежнему будет содержать мертвый контроллер, и новые контроллеры не могут быть добавлены.
В настоящее время я использую этот обходной путь, который я считаю довольно уродливым. Любые идеи, как я могу заставить это работать без этого взлома:
if (System.getProperty("os.name").equals("Windows 7") &&
System.getProperty("os.arch").equals("amd64"))
try {
Class<?> clazz = Class.forName("net.java.games.input.DefaultControllerEnvironment");
Constructor<?> defaultConstructor = clazz.getDeclaredConstructor();
defaultConstructor.setAccessible(true); // set visibility to public
Field defaultEnvironementField = ControllerEnvironment.class.getDeclaredField("defaultEnvironment");
defaultEnvironementField.setAccessible(true);
defaultEnvironementField.set(ControllerEnvironment.getDefaultEnvironment(), defaultConstructor.newInstance());
} catch (Exception e) {
e.printStackTrace();
}
2 ответа
Это просили иногда в прошлом. 2 способа решить это.
1) Подключите все свои контроллеры, прежде чем начать игру. Не все существующие игры также поддерживают это.
2) Реализовать интерфейс интерфейса, который существует. Я несколько раз просил добровольца выполнять работу, но всякий раз, когда я это делаю, это внезапно становится менее приоритетным.
Получите ваши контроллеры по телефону
DirectAndRawInputEnvironmentPlugin directEnv = new DirectAndRawInputEnvironmentPlugin();
controllers = directEnv.getControllers();