Я кодировал проект шаров, отскакивающих от стены, и все работает нормально, кроме того, когда я достаточно быстро перемещаю мышь по панели рисования, перерисовка зависает. Итак, я сделал пример в 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: я заметил, что проблема существует только при использовании внешней мыши. В противном случае все в порядке. Это была локальная проблема, а не код. Спасибо за помощь, однако!
dispose()
, это должно сработать (если моиGraphic
не заржавели) - person AxelH   schedule 21.11.2016