Движение мыши задерживает перерисовку()

Я кодировал проект шаров, отскакивающих от стены, и все работает нормально, кроме того, когда я достаточно быстро перемещаю мышь по панели рисования, перерисовка зависает. Итак, я сделал пример в Edit 2, и проблема существует и там. Почему? Как я могу это исправить или обойти это?

Редактировать 1: Вот как выглядит мой код: здесь
Редактировать 2: я создал этот пример, чтобы сделать его более понятным.

import javax.swing.*;
import java.awt.*;

import static javax.swing.JFrame.EXIT_ON_CLOSE;

public class DrawingPanel extends JPanel
{
    public Ball ball;
    public DrawingPanel()
    {
        super();
        setPreferredSize(new Dimension(300, 100));
        setBackground(Color.black);
        this.ball = new Ball(10);
        this.ball.start();
    }
    public static void main(String[] args)
    {
        JFrame frame = new JFrame("Laggy ball");
        DrawingPanel panel = new DrawingPanel();
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.add(panel);
        frame.setContentPane(panel);
        frame.pack();
        frame.setVisible(true);
        while(true)
        {
            try
            {
                Thread.sleep(17);
            } catch (InterruptedException e)
            {
                e.printStackTrace();
            }
            panel.repaint();
        }
    }

    @Override
    protected void paintComponent(Graphics g)
    {
        super.paintComponent(g);
        ball.draw(g);
    }

    public class Ball extends Thread
    {
        public int position;
        public int velocity;
        public Ball(int velocity)
        {
            super();
            this.position = 0;
            this.velocity = velocity;
        }
        void draw(Graphics g)
        {
            g.setColor(Color.blue);
            g.fillOval(position, 50, 20, 20);
        }
        void update()
        {
            position += velocity;
            if(position > getWidth() || position < 0)
                velocity *= -1;
        }
        @Override
        public void run()
        {
            while(true)
            {
                try
                {
                    Thread.sleep(17);
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
                update();
            }
        }
    }
}

Изменить 3: одна проблема решена. По крайней мере, я знаю, что проблема не в коде, а в моем ноутбуке.

Изменить 4: я заметил, что проблема существует только при использовании внешней мыши. В противном случае все в порядке. Это была локальная проблема, а не код. Спасибо за помощь, однако!


person reconn    schedule 21.11.2016    source источник
comment
Это следует спросить на codereview.. Как вы ремонтировали свои яйца? С нуля или только изменения? примечание: поскольку я не могу открыть ссылку Pastebin из офиса, я не вижу ваш код. Вы должны добавить это к своему вопросу (только интересная часть)   -  person AxelH    schedule 21.11.2016
comment
Вы реализовали mousemotionlistener (согласно вашему тегу)?   -  person Gildraths    schedule 21.11.2016
comment
Это может вам помочь: задержки в рисовании линии, заданной перетаскиванием мыши"> stackoverflow.com/questions/19781603/   -  person theDarkerHorse    schedule 21.11.2016
comment
@Gildraths Я не реализовал прослушиватель мыши (движения)   -  person reconn    schedule 21.11.2016
comment
Не звоните dispose(), это должно сработать (если мои Graphic не заржавели)   -  person AxelH    schedule 21.11.2016
comment
Чтобы быстрее получить помощь, опубликуйте минимально воспроизводимый пример или Короткий, автономный, правильный пример.   -  person Andrew Thompson    schedule 21.11.2016
comment
@AxelH Я опубликовал наглядный пример без использования dispose() в Edit 2, тот же эффект. Но, как видите, я избавляюсь от g2d, который перестраивается при каждой перекраске(), так что все в порядке.   -  person reconn    schedule 21.11.2016
comment
Теперь, когда вы привели этот пример, я не могу воспроизвести ваше отставание. Это гладко на легкой ВМ (одно ядро, 2 ГБ ОЗУ).   -  person AxelH    schedule 21.11.2016
comment
@AxelH, видимо, вы правы :( На макбуке моего друга он работает нормально, а на моем макбуке (той же модели) он отстает, когда мышь движется по панели.   -  person reconn    schedule 21.11.2016
comment
Что ж, я бы сказал, что это проблема OSX, возможно, я некоторое время работал над тем, чтобы сделать приложение совместимым с OSX, потому что Java не была полностью совместима.   -  person AxelH    schedule 21.11.2016
comment
@AxelH Возможно, вы правы .. в любом случае спасибо за помощь!   -  person reconn    schedule 21.11.2016