java - 我无法以 200 的间隔进行图像更新

标签 java image jframe jpanel screen-capture

我正在尝试创建一个读取屏幕并将其显示在框架中的线程,此代码旨在以 5fps 的速度运行,到目前为止它读取屏幕,但我无法让 JFrame 每次都显示更新图像“帧”或 200 毫秒。当我使用 repaint();或重新验证();

public static void startScreenRecorder() 
{
    Thread screenThread = new Thread()
    {
        public synchronized void run()
        {
            long time;
            long lastFrameTime = 0;
            JFrame frame = new JFrame("Screen capture");
            ImagePanel panel = new ImagePanel(captureScreen());
            frame.add(panel);
            frame.setSize(300, 400);
            frame.setVisible(true);

            while (true) 
            {
                time = System.currentTimeMillis();
                while (time - lastFrameTime < 190) 
                {
                    try {
                        Thread.sleep(10);
                    } catch (Exception e) {
                    }

                    time = System.currentTimeMillis();
                }                
                lastFrameTime = time;

                panel = new ImagePanel(captureScreen());
                panel.revalidate();
                panel.repaint();
                frame.revalidate();
                frame.repaint();
            }
        }
    };
    screenThread.start();
}

最佳答案

不要使用 Thread.sleep() 来尝试控制动画。

动画应该使用 Swing Timer 来完成.当您使用计时器时,GUI 会在 EDT 上自动更新。

panel = new ImagePanel(captureScreen());

上面的代码没有做任何事情。它只是在内存中创建一个面板。实际上,您无处可将面板添加到 GUI。更改变量的引用不会更新 GUI。

相反,您可能应该将 JLabel 添加到框架中(当您最初创建框架时)。然后当你有一个新的图像时,你就可以这样做:

label.setIcon( new ImageIcon( your screen capture ) );

关于java - 我无法以 200 的间隔进行图像更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16097068/

相关文章:

java - 如何在具有 GridLayout 的 JPanels 中居中对齐所有内容

java - logcat 中出现错误 "isDataSchedulerEnabled():false"

jquery - 如何在点击/加载时滑入新加载的图像

java - 可以传递 JFrame 作为参数,然后我得到我创建的字段吗?

python - OpenCV 寻找图像的紧密匹配

c++ - 获取投影图像像素位置

java - 我如何编写代码来显示每个 JPanel 中的每个字母,以及如何旋转。 (JFrame、NetBeans)

java - 在servlet中从字节数组创建图像

java - 你能得到继承的方法的子类吗?

c# - 哪个最适合中级 php 程序员开始编程(java vs c#)