我编写了一个Java应用程序,允许用户编写鼠标/键盘输入脚本(JMacro,链接不重要,仅用于好奇)。我个人使用该应用程序在我睡觉的同时在线游戏中自动执行角色动作。不幸的是,我一直在早上回到电脑前发现它没有反应。经过进一步测试,我发现我的应用程序导致计算机在大约10分钟的用户空闲时间后无响应(即使应用程序本身模拟用户活动)。我似乎无法指出这个问题,所以我希望其他人可能会建议在哪里寻找或可能导致问题的原因。
相关症状和特征:
鉴于问题的症状和特征,就好像Java应用程序导致登录用户的桌面显示停止更新,包括任何正在运行的应用程序。
使用的编程概念和Java包:
系统规格:
总之,我应该强调,我不是在寻找任何具体的解决方案,因为我没有提出一个非常具体的问题。我只是想知道在使用我正在使用的Java库时是否有人遇到过类似的问题。我也很乐意感谢任何建议,试图进一步查明造成我问题的原因。
谢谢!
罗斯
PS,如果我在继续调试时遇到其他任何问题,我会发布更新/回答。
更新:我的应用程序涉及多线程进程,每个进程初始化自己的Robot对象并异步创建输入事件。我重构了应用程序只包含一个Robot单例对象,但不同的进程仍然异步调用输入命令。据我所知,这并没有改变我的应用程序的行为。我的下一步可能是在Robot单例周围创建一个同步包装器,看看是否有帮助,但鉴于症状,我不知道为什么会这样。
答案 0 :(得分:4)
我以前在使用Robot类时遇到了问题。我完全忘记了我的所作所为,但它导致计算机锁定,我被迫重启。
答案 1 :(得分:4)
我不熟悉Robot
的变幻莫测,但Uncaught exceptions in GUI applications会在事件发送线程死亡并重新启动时产生非常奇怪的结果。您可以从How uncaught exceptions are handled获得一些想法。
答案 2 :(得分:2)
如果您激活任何屏幕保护程序或类似的东西,这可能会发生,那么此机器人操作将停止工作
我通过以下方式解决了这个问题
我有一些基于GUI的应用程序,我根据Robot类编写了一些测试代码。
但是如果我在我的系统中激活了屏幕保护程序,那么这个测试用例就会停止工作......
请检查您的案例中是否存在任何此类情况
答案 3 :(得分:1)
对于其他人,如果您的程序在一段时间后停止工作,则可能是您没有正确处理程序中的所有异常。尝试在停止时获取该行:您可以通过向系统控制台发送一行文本并重写它以获得所需的性能来实现。
其余检查你的代码并检查它是否非常好,以确定你没有进入死锁,如果它有某些东西可能会卡住你的电脑。
同时检查CPU使用情况,看看程序是否超载,如果你的CPU温度控制将重启或自动关闭你的电脑。
如果我没有遇到问题,请告诉我;如果你解决了这个案子,请让我知道你做了什么。
答案 4 :(得分:0)
我们有两台机器与Java应用程序几乎完全相同。
一个是Windows 7 64位,其中Eclipse 64bit和Java 6(64位)导致完全相同的冻结。
其他是Windows 7 32位和Java应用程序利用大量的CPU和磁盘活动导致冻结。
这两款机器都是东芝的笔记本电脑,带有现代CPU(Core 2 Duo)。
这两台机器都安装了NOD32防病毒软件。
标准应用(Office,Skype,Firefox,...)
答案 5 :(得分:0)
我们似乎追踪了NOD32的问题。当我们禁用NOD32时,似乎beahaviour不再出现。
我想指出,我认为它不是NOD32本身,而是Windows 7,Java JDK和NOD32的某种组合。
答案 6 :(得分:0)
我在Mac OS X 10.6.7上遇到了类似的问题,但它并没有冻结整个系统,而是整个java进程,我的应用程序在其中运行,随机有趣。解决方法是调用:
Toolkit.getDefaultToolkit();
在创建任何机器人之前,例如:
public static void main(String[] args) { Toolkit.getDefaultToolkit(); //Blah blah }
同样的调用是在init
类的Robot
方法中进行的,所以似乎问题来自哪里,这是愚蠢的,对我来说没有多大意义,但现在完美地工作:)