1

我用 Java 编写了一个简单的代码,它使用 Robot 类根据某些条件移动鼠标。

尽管代码运行良好,但在其他应用程序运行时似乎存在“滞后”。

我认为 Java 在发布系统消息时存在一些问题。

有没有办法避免这种情况?

4

1 回答 1

1

在开始考虑减少延迟之前,您必须首先了解其原因。我将以一种您可以理解“为什么”以及“要做什么”的方式给出答案。

根据您的描述,延迟仅在其他程序与您的机器人一起运行时发生,延迟的最可能原因是:


缺乏系统资源- 太多东西同时运行,消耗太多内存/处理能力,从而使操作系统减慢一些程序以便能够运行其他程序。

怎么办:要尝试解决此类问题,您可以尝试优化代码,使其使用更少的内存/处理能力,从而减少延迟的原因,并隐式减少延迟本身。不幸的是,很难对任何 3rd 方程序合法地做同样的事情,因此如果并发应用程序不是您的,则很难完全消除滞后。


关于不可复制、不可共享组件的并发性——一个或多个组件一次不能被多个进程访问并且不能被克隆到多个实例中,需要被多个正在运行的进程使用。当一个进程控制它时,任何其他进程都别无选择,只能等待组件被释放。

怎么办:在这种情况下,除了降低并发进程的优先级同时增加你的优先级(有效地减慢它们以使你的程序运行得更快)或完全关闭它们之外,几乎没有任何合法的方法。

怎么做:为了增加进程的优先级,这是将其设置为 80%(默认通常为 50%)的代码,插入到您的main()

Thread.currentThread().setPriority((int)(Thread.MAX_PRIORITY*0.8));

注意:您可以将您的进程设置为“从不”放开它需要的任何组件,使用Thread.MAX_PRIORITY不乘以0.8,但这是不推荐的,因为它几乎会暂停任何需要组件的进程(与在你的正在运行),如果你的程序挂起,无论出于何种原因,这些也会挂起,因为组件永远不会被释放。

于 2012-07-17T15:50:51.453 回答