Java 如何记录一段时间内的移动,回放鼠标移动?

Java 如何记录一段时间内的移动,回放鼠标移动?,java,swing,time,awt,mousemove,Java,Swing,Time,Awt,Mousemove,我试着记录鼠标在一段时间内的移动,并在回放中看到它们(可能是视频,可以食用)。我需要能够检索鼠标在给定特定时间的坐标中的确切位置。 例如:记录鼠标移动20秒。我需要在10.6秒时得到鼠标的位置 随着时间的推移,存储这些鼠标坐标的最佳方法是什么? 最好的播放方式是制作一个视频来进行整个播放 为了获得鼠标的坐标,我使用Java的官方鼠标运动监听器 MouseEvent类分别有getX()和getXOnScreen()等方法,Y轴也是如此 一种方法是:创建一个包含所需信息的类,如: class Sim

我试着记录鼠标在一段时间内的移动,并在回放中看到它们(可能是视频,可以食用)。我需要能够检索鼠标在给定特定时间的坐标中的确切位置。 例如:记录鼠标移动20秒。我需要在10.6秒时得到鼠标的位置

随着时间的推移,存储这些鼠标坐标的最佳方法是什么? 最好的播放方式是制作一个视频来进行整个播放

为了获得鼠标的坐标,我使用Java的官方鼠标运动监听器


MouseEvent类分别有
getX()
getXOnScreen()
等方法,Y轴也是如此

一种方法是:创建一个包含所需信息的类,如:

class SimpleCoordinate {
  private final int x;
  ...
然后在主程序中:

List<SimpleCoordinate> coordinatesHistory = new ArrayList<>();
你到底在课堂上储存了什么取决于你自己。可以只是“坐标”,但也可以添加某种时间戳

需要仔细考虑/设计/测试的关键问题:

  • 鼠标侦听器的“粒度”有多大(比如当你移动鼠标非常快时,你会得到多少个事件)
  • 该程序应该记录多长时间(如果它应该记录几天或几周的用户活动,您可能只需将该信息添加到内存中,内存就用完了)

当然,您也可以将记录推送到某个“队列”中,让另一个线程定期从队列中提取元素,以某种方式持久化它们

首先,我会将MouseEvent和时间戳存储在LinkedList中。“播放视频的最佳方式是播放整个视频?”这与最初提出的问题截然不同。它应该在自己的问答线程上。@SteveSmith,我担心计算机是否能够及时处理它们,因为鼠标会产生许多突然的移动,我可能会采用这种方法,但会有一些间隔(例如,每调用一次,我将获得每调用2个动作的坐标)只有一种方法可以确定计算机是否能够应付不过我不认为这会是个问题,因为不管您是否存储它,
MouseEvent
对象都会自动为每个mouseMoved()调用创建。是的,我同意!起初,我也想到了同样的方法,但鼠标的速度有时可能太快,程序无法录制。最糟糕的情况是,我每2个响应计算1个响应,希望减少输入的数量。因为这可能是最有可能的方法,所以我将用你的答案来结束这个问题!
List<SimpleCoordinate> coordinatesHistory = new ArrayList<>();
coordinatesHistory.add(new SimpleCoordinate(...))