当游戏鼠标移动时,GIF停止动画

Yak*_*hzi 7 java macos swing timer animated-gif

当我将游戏鼠标移动到a中时javax.swing.JFrame,所有动画GIF(javax.swing.ImageIcon在a内javax.swing.JLabel)停止动画直到鼠标停止移动.

只是一个游戏鼠标与司机发生的MacOS(与火箭通力XTD和两台计算机上的Razer游戏鼠标测试过).当我使用其他鼠标时,一切正常.

游戏鼠标也导致javax.swing.Timers停止调用他们的actionPerformed()方法.我在这里为这个问题打开了一个线程,但是这可以用来java.util.TimerTask代替.(编辑:实际上TimerTask也没有修复它,因为JFrame在鼠标停止移动之前不会重新绘制.)

但我找不到动画GIF的替代方案.我更感兴趣的是解决问题而不是使用替代方案,尽管我也会感谢一个有效的替代方案.

码:

import java.lang.reflect.InvocationTargetException;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;

public class Mouse {
    public static void main(String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    new Mouse();
                }

            });
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public Mouse() {
        JFrame frame = new JFrame();
        JLabel label = new JLabel(new ImageIcon(getClass().getResource("waiting.gif")));

        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        frame.add(label);
    }
}
Run Code Online (Sandbox Code Playgroud)

运行申请:

在此输入图像描述

MCVE:

import java.lang.reflect.InvocationTargetException;
import java.net.*;
import javax.swing.*;

public class Mouse {
    public static void main(String[] args) {
        try {
            SwingUtilities.invokeAndWait(new Runnable() {
                public void run() {
                    try {
                        new Mouse();
                    } catch (MalformedURLException ex) {
                        ex.printStackTrace();
                    }
                }

            });
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    public Mouse() throws MalformedURLException {
        JFrame frame = new JFrame();
        JLabel label = new JLabel(new ImageIcon(
                new URL("https://i.stack.imgur.com/HXCUV.gif")));

        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);

        frame.add(label);
    }
}
Run Code Online (Sandbox Code Playgroud)

Yak*_*hzi 1

我将鼠标的轮询率从 1000Hz 降低到 500Hz,从而解决了这个问题。现在一切都很完美。我认为问题在于 UI 线程在处理每秒 1000 个轮询时过度扩展,因此忙于制作 GIF 动画。