2012-10-30 75 views
2

我在Win7 64bit上使用JInput進行遊戲手柄控制。我遇到了一個問題:一旦我得到DefaultEnvironment控制器列表不會得到更新或刷新。JInput不更新/刷新

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(); 
     } 
+0

你有沒有發現這種非破解補丁讓您的控制器?只是好奇,因爲我現在和你處於同樣的困境。 – Propeller

+0

可悲的是我沒有找到更好的解決方案,對不起。 – atx

回答

0

這已經要求偶見於過去。解決這個問題的兩種方法。

1)在開始遊戲前插入所有控制器。並非所有現有的遊戲都支持這一點。

2)實現存在的接口接口。我曾多次問過志願者做這項工作,但每當我這樣做時,這突然變得不那麼重要。

+0

** 1)**不是一個選項** 2)**沒有得到它。上面的解決方法解決了這個問題,但我並不自豪,因爲它使用不應該使用的API ... – atx

0

通過調用

DirectAndRawInputEnvironmentPlugin directEnv = new DirectAndRawInputEnvironmentPlugin(); 
controllers = directEnv.getControllers();