我一直在编写一个球弹跳墙的项目,一切正常,除了当我将鼠标移动到绘图面板上足够快,重绘是滞后的。所以我在Edit 2中做了一个例子,那里也存在问题。为什么?我该如何解决或解决它?
编辑1:
这就是我的代码的样子:here
编辑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: 我注意到只有在使用外接鼠标时才会出现问题。否则一切都很好。这是一个本地问题,而不是代码。不过,谢谢你的帮助!