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();
Другие вопросы по тегам