Eu escrevi um programa simples de animação Java no Ubuntu 14.4.1. Uma bola se movendo dentro de um JPanel. Mas na execução, a bola se move bastante irregular no JPanel. Esse problema continua até que eu mova o mouse dentro do JPanel. No momento de mover o mouse dentro do JPanel, o movimento da bola é bastante suave. Deve ser dito que eu corri este programa no Windows 10, e nenhum problema ocorreu. O código do meu programa é o seguinte:
%pre% Qual é o problema? Tenho que alterar algumas configurações no meu Ubuntu?
Eu também coloquei alguns códigos de teste dentro do método paintComponent da seguinte forma:
com valor inicial do contador variável de 0 declarado na classe MovingBall. Observei que o número de chamadas do paintComponent por segundo é muito maior do que a taxa real de atualização do JPanel, conforme aparece.
Eu escrevi um programa simples de animação Java no Ubuntu 14.4.1. Uma bola se movendo dentro de um JPanel. Mas na execução, a bola se move bastante irregular no JPanel. Esse problema continua até que eu mova o mouse dentro do JPanel. No momento de mover o mouse dentro do JPanel, o movimento da bola é bastante suave. Deve ser dito que eu corri este programa no Windows 10, e nenhum problema ocorreu. O código do meu programa é o seguinte:
import java.awt.*;
import javax.swing.*;
public class MovingBall extends JPanel {
Ball ball = new Ball();
void startAnimation() {
while( true ) {
try {
Thread.sleep( 25 );
ball.go();
repaint();
} catch( InterruptedException e ) {}
} // end while( true )
} // end method startAnimation()
protected void paintComponent( Graphics g ) {
super.paintComponent( g );
ball.draw( g );
} // end method paintComponent
class Ball {
int x;
int y;
int xSpeed = 100;
int ySpeed = 70;
void go() {
x = x + (xSpeed*25)/1000;
y = y + (ySpeed*25)/1000;
if( x < 0 ) {
x = 0;
xSpeed = -xSpeed;
} else if( x > 490 ) {
x = 490;
xSpeed = -xSpeed;
} else if( y < 0 ) {
y = 0;
ySpeed = -ySpeed;
} else if( y > 490 ) {
y = 490;
ySpeed = -ySpeed;
} // end if-else block
} // end method go()
void draw( Graphics g ) {
g.fillOval( x , y , 10 , 10 );
} // end method draw
} // end inner class Ball
public static void main( String[] args ) {
JFrame window = new JFrame();
window.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
MovingBall animation = new MovingBall();
animation.setPreferredSize( new Dimension( 500 , 500 ) );
animation.setBackground( Color.white );
window.add( animation );
window.pack();
window.setVisible( true );
animation.startAnimation();
} // end method main
} // end class MovingBall
Qual é o problema? Tenho que alterar algumas configurações no meu Ubuntu?
Eu também coloquei alguns códigos de teste dentro do método paintComponent da seguinte forma:
protected void paintComponent( Graphics g ) {
System.out.println( "paintComponent call number: " + counter );
++counter;
super.printComponent( g );
ball.draw( g );
}
com valor inicial do contador variável de 0 declarado na classe MovingBall. Observei que o número de chamadas do paintComponent por segundo é muito maior do que a taxa real de atualização do JPanel, conforme aparece.