Java 应用程序在用户闲置 10 分钟后导致屏幕显示无响应

2023-12-21

我编写了一个 Java 应用程序,允许用户编写鼠标/键盘输入脚本(JMacro http://jmacro.org,链接不重要,仅供好奇)。我个人使用该应用程序在夜间睡觉时自动执行在线游戏中的角色动作。不幸的是,我早上总是回到电脑前,发现它没有反应。经过进一步测试,我发现我的应用程序会导致计算机在大约 10 分钟的用户空闲时间后变得无响应(即使应用程序本身模拟用户活动)。我似乎无法确定问题所在,所以我希望其他人可以建议在哪里查看或可能导致问题的原因。

相关症状及特征:

  • 用户闲置10分钟后无响应
  • 用户仍然可以在屏幕上移动鼠标指针
  • 除了鼠标之外的所有内容都显示为冻结...鼠标单击不起作用,并且没有应用程序更新其显示,包括 Windows 7 桌面
  • 我将任务管理器与应用程序一起保留了一夜,这样我就可以在屏幕冻结之前看到最后一个任务管理器图像...Java 应用程序处于正常的 CPU/内存使用率,总 CPU 使用率仅为约 1%
  • 移动鼠标后(换句话说,用户从闲置中回来),屏幕图像在30分钟内再次开始更新(这是非常偶然的......有时10分钟,有时两个小时后没有结果)
  • 用户可以按 CTRL-ALT-DEL 进入 Windows 7 的 CTRL-ALT-DEL 屏幕(暂停 30 秒后)。用户仍然可以移动鼠标指针,但单击任何按钮选项都会导致屏幕再次冻结
  • 在一些非常罕见的情况下,系统永远不会冻结,并且我在早上以完全响应的方式返回它
  • Java 应用程序会在半夜自动停止输入脚本,因此 Windows 7 会检测到“真正的”空闲状态,并将显示器转为待机模式……早上我醒来时手动移动鼠标,它们成功退出了待机模式,即使桌面显示仍然冻结

鉴于问题的症状和特征,就好像 Java 应用程序导致登录用户的桌面显示停止更新,包括任何正在运行的应用程序。

编程概念和使用的 Java 包:

  • 多线程
  • 标准out and err被重新路由到 javax.swing.JTextArea
  • 该应用程序使用 Swing GUI
  • awt.Robot(使用非常频繁)
  • awt.指针信息
  • awt.MouseInfo

系统规格:

  • Windows 7 专业版
  • Java 1.6.0 u17

总之,我应该强调,我并不是在寻找任何具体的解决方案,因为我没有问一个非常具体的问题。我只是想知道是否有人在使用我正在使用的 Java 库时遇到过类似的问题。我也很乐意感谢任何建议,以尝试进一步查明导致我的问题的原因。

Thanks!

Ross

PS,如果我在继续调试此问题时设法偶然发现其他任何内容,我将发布更新/答案。

Update:我的应用程序涉及多线程进程,每个进程初始化自己的机器人对象并异步创建输入事件。我重构了该应用程序,使其仅包含一个 Robot 单例对象,但不同的进程仍然异步调用输入命令。据我所知,这并没有改变我的应用程序的行为。我的下一步可能是围绕机器人单例创建一个同步包装器,看看这是否有帮助,但鉴于症状,我不知道为什么会这样。


我之前在使用 Robot 类时遇到过问题。我完全忘记了我做了什么,但它导致计算机锁定并且我被迫重新启动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 应用程序在用户闲置 10 分钟后导致屏幕显示无响应 的相关文章

随机推荐