- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在使用 java jinput
库从游戏 handle 读取数据,但我无法重新加载 Controllers
,我用它来加载它们:
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[]{});
}
这工作正常,但如果我断开我的 Controller ,调用它会再次找到它,反之亦然(在第一次检查后连接它根本找不到它)。
我试着在第一次查找之前先 sleep ,结果如下:
第 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 次等时间准确地重新加载 Controller ?
最佳答案
我遇到了同样的问题。原因是实际的硬件扫描对于每个 DefaultControllerEnvironment 对象只发生一次。由于唯一可访问的实例化是单例,因此它永远不会进行另一次扫描。
强制硬件扫描的一种简单方法是创建一个新对象,但类和构造函数都不是公共(public)的。但是,您可以通过反射调用构造函数来解决此限制。
重新扫描
private static ControllerEnvironment createDefaultEnvironment() throws ReflectiveOperationException {
// Find constructor (class is package private, so we can't access it directly)
Constructor<ControllerEnvironment> constructor = (Constructor<ControllerEnvironment>)
Class.forName("net.java.games.input.DefaultControllerEnvironment").getDeclaredConstructors()[0];
// Constructor is package private, so we have to deactivate access control checks
constructor.setAccessible(true);
// Create object with default constructor
return constructor.newInstance();
}
用法
// Be aware that creating a new environment is fairly expensive
Controller[] controllers = createDefaultEnvironment().getControllers();
删除 Windows 8 警告
/**
* Fix windows 8 warnings by defining a working plugin
*/
static {
AccessController.doPrivileged(new PrivilegedAction<Object>() {
public Object run() {
String os = System.getProperty("os.name", "").trim();
if (os.startsWith("Windows 8")) { // 8, 8.1 etc.
// disable default plugin lookup
System.setProperty("jinput.useDefaultPlugin", "false");
// set to same as windows 7 (tested for windows 8 and 8.1)
System.setProperty("net.java.games.input.plugins", "net.java.games.input.DirectAndRawInputEnvironmentPlugin");
}
return null;
}
});
}
关于Java Jinput : rescan/reload controllers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17413690/
我遇到了很棒的ctrlp.vim plugin 。它是 Command-T plugin 的一个很好的替代品。我以前用过。我不喜欢 Command-T 的是,在启动 vim 后第一次调用 Comman
我正在使用 java jinput 库从游戏 handle 读取数据,但我无法重新加载 Controllers,我用它来加载它们: public Controller[] findStickContr
如何避免在 Git GUI 中扫描不必要的/临时文件?例如 obj、pdb 文件等...? 最佳答案 通常的机制适用,即: 在“.git/info/exclude”中列出目录、文件或模式 - 这将是每
在 Android 4.x 中,将 APK 文件放入/system/priv-app 就足够了,包管理器会识别该新文件并(卸载)安装相应的应用程序或服务。 从 Android L 开始,仅将文件放入该
因此,我的应用根据用户的请求从在线来源下载图像。通过 Activity 中的按钮,用户可以选择隐藏或显示图库中的图像。这很简单,我只是根据需要添加或删除一个 .nomedia 文件。但是,我想每次都重
我正在尝试编译第三方项目,但遇到了一些链接问题。我在解决小问题时没有遇到太大问题,但我注意到它们是项目或解决方案上下文菜单中的“重新扫描解决方案”选项。 我点击了它,但它似乎没有做任何事情。它到底有什
我是一名优秀的程序员,十分优秀!