This post checks-for-similar-controllers 似乎表明控制器连接/断开功能不存在。我们的 GUI 需要检测设备何时被移除(例如电缆拉动),当前它通过在计时器上(每秒一次)分配 DirectAndRawInputEnvironmentPlugin 对象来执行此操作。
但是,如果设备不插电超过 9 小时,应用程序将冻结并引发 OOME。jvisualvm 的内存采样器表明 DIDeviceObject 有相当多的实例占用了大量内存,直到应用程序关闭才会释放。Jinput java 代码的二进制文件被替换为库 java 源代码以方便调试等,在查看 DirectInputEnvironmentPlugin 的构造函数后,我注意到添加了一个 ShutdownHook 作为特权操作。注释掉 ShutdownHook 代码后,内存泄漏已解决,但代码仍然失败(以不同的方式),因为库无法创建 win32 设备枚举所需的虚拟窗口。我试图构建 jinput 库来调试 dll,但到目前为止还没有成功,
任何关于上述任何内容的想法都非常感谢。