2016-11-30 2 views
-1

Может кто-нибудь объяснить мне, почему мне нужно поместить метод repaint() в этот код? Если я не делаю это я получаю ошибку stackoverflowМетод переполнения Java paint()

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

Чтобы лучше помочь, опубликуйте [MCVE] или [Short, Self Contained, Correct Example] (http://www.sscce.org/). –

ответ

1

Если я не делаю это я получаю ошибку StackOverflow

на основе кода условии, что мы не можем сказать вам, почему вы получаете переполнение стека. Вероятно, проблема заключается в одном из ваших методов, связанных с объектом frameRate.

Не вызывайте repaint() из метода рисования, это вызовет бесконечную петлю окраски.

Если вы пытаетесь сделать какую-то анимацию, вы должны использовать Swing Timer, чтобы запланировать анимацию, и когда вы запускаете Timer, вы вызываете repaint().

Кроме того, не переопределяйте краску (...). Пользовательская покраска выполняется путем переопределения paintComponent(...).

+0

Просто удалите свои комментарии. –

Смежные вопросы