我编写了一个基于 GUI 的 Java 程序,它每秒截取 25 个屏幕截图并将它们保存在用户定义的位置。
它工作得很好,除了它有两个问题:
BufferedImage
s 中不包含光标信息。它们必须以编程方式添加。以下是我的应用程序的图像:
屡获殊荣的直观 GUI:
捕获的高清图像如下所示:
从图像中可以看出,光标信息正在使用MouseInfo
的静态方法在控制台中显示。
请让我知道如何解决上述两个问题。
解决问题后,图像现在如下所示:
我编写了一个基于 GUI 的 Java 程序,它每秒截取 25 个屏幕截图并将它们保存在用户定义的位置。
它工作得很好,除了它有两个问题:
BufferedImage
s 中不包含光标信息。它们必须以编程方式添加。捕获的高清图像如下所示:
从图像中可以看出,光标信息正在使用MouseInfo
的静态方法在控制台中显示。
请让我知道如何解决上述两个问题。
解决问题后,图像现在如下所示:
图像中缺少鼠标光标,我知道这是因为 BufferedImages 中不包含光标信息。它们必须以编程方式添加。
没错,你必须在之后添加光标。原因是使用 Robot 类截取的屏幕截图从不包含光标。并不是因为“BufferedImage 不包含鼠标信息”。BufferedImage 是一个包含像素栅格的类。
获取屏幕截图的线程是一个守护线程。因此,如果我关闭应用程序,线程将被终止,并且正在写入的 PNG 图像被破坏。我想避免这种情况。
简单地说,在屏幕截图线程中,使用一个标志来指示它是否应该继续。只要该布尔值设置为true,就继续截取屏幕截图。确保将其设为非恶魔。因此,当您关闭应用程序时,将标志设置为 false。可能最简单的方法是添加一个 WindowListener:
yourFrame.addWindowListener(new WindowAdapter()
{
public void windowClosed(WindowEvent e)
{
screenshotThread.stopTakingScreenshots(); // This methods set the flag
}
}
另请注意,您没有花时间制作和保存屏幕截图。您使用 40 毫秒的固定睡眠,但假设拍摄和保存屏幕截图需要 4 毫秒,那么您应该只睡眠 36 毫秒。要计算制作屏幕截图所需的时间,System.currentTimeMillis();
请在您的方法之前和之后使用takeShot()
并有所作为。