Я использую Java jinput
библиотеку для чтения данных из джойстика, и у меня есть проблема перегрузка Controllers
, я использую это, чтобы загрузить их:Java Jinput: контроллеры Пересканировать/перезарядки
public Controller[] findStickControllers() {
ControllerEnvironment ce =
ControllerEnvironment.getDefaultEnvironment();
Controller[] cs = ce.getControllers();
System.out.println(cs.length); //test
ArrayList<Controller> sel = new ArrayList<>();
for (Controller c: cs) {
if(c.getType() == Type.STICK) {
sel.add(c);
}
}
return sel.toArray(new Controller[]{});
}
Это работает отлично, но если я отключите мой контроллер, вызывая это, он снова найдет его, и наоборот (соединение его после первой проверки не обнаружит его вообще).
Я попытался положить спать до кулачного поиска, с этими результатами:
- Контроллеры Acctually сканируются, когда этот метод вызывается первый раз (не в начале программы)
- При вызове снова , это всегда возвращает те же самые контроллеры, которые были возвращены в первый раз.
- Первый вызов будет также написать предупреждение ниже
- Даже если контроллер подключен (и работает), а затем отключается (он все равно будет его найти, хотя) и соединившихся, он не будет работать
Предупреждение от точки 3 : (не формат хорошо в списке)
WARNING: Found unknown Windows version: Windows 8
Attempting to use default windows plug-in.
Loading: net.java.games.input.DirectAndRawInputEnvironmentPlugin
Я использую Win 8, и была такая же проблема на Win 7. Я также попытался это с мышью, те же результаты.
Как я могу нормально перезагрузить контроллеры для 2-го, 3-го и так далее?
Существует PR с исправлением hotplug, ожидающим объединения здесь. https://github.com/jinput/jinput/pull/11 –