Java paint()方法溢出

时间:2016-11-30 20:04:32

标签: java swing jframe paint

有人可以向我解释为什么我需要在此代码中加入repaint()方法吗? 如果我不这样做,我会收到stackoverflow错误

private class GamePanel extends JPanel
{
    public void paint(Graphics g)
    {
        super.paint(g);
        onPaint(g);
    }
 }


protected void onPaint(Graphics g)
{
    frameRate.calculate();
    g.setColor(Color.WHITE);
    g.drawString(frameRate.getFrameRate(),30,30);
    repaint();
}

1 个答案:

答案 0 :(得分:1)

  

如果我不这样做,我会收到stackoverflow错误

根据提供的代码,我们无法告诉您为什么会出现堆栈溢出。问题可能在于您的一个与frameRate对象相关的方法。

不要从绘图方法调用repaint(),这将导致无限的绘制循环。

如果您尝试制作某种动画,那么您应该使用Swing Timer来安排动画,并在Timer触发时调用repaint()

另外,不要覆盖paint(...)。自定义绘画是通过覆盖paintComponent(...)来完成的。