2

我编写了一个基于 GUI 的 Java 程序,它每秒截取 25 个屏幕截图并将它们保存在用户定义的位置。
它工作得很好,除了它有两个问题:

  • 图像中缺少鼠标光标,我知道这是因为BufferedImages 中不包含光标信息。它们必须以编程方式添加。

  • 获取屏幕截图的线程是一个守护线程。因此,如果我关闭应用程序,线程将被终止,并且正在写入的 PNG 图像被破坏。我想避免这种情况。

  • 以下是我的应用程序的图像:
    屡获殊荣的直观 GUI
    在此处输入图像描述

    捕获的高清图像如下所示
    在此处输入图像描述
    从图像中可以看出,光标信息正在使用MouseInfo的静态方法在控制台中显示。


    请让我知道如何解决上述两个问题。
    解决问题后,图像现在如下所示:
    带光标

    4

    1 回答 1

    2

    图像中缺少鼠标光标,我知道这是因为 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()并有所作为。

    于 2012-09-11T18:09:04.477 回答