G
Guest
Gast
Hallo,
ich habe das Problem, dass mein kleines, selbstgeschriebenes Programm meiner Meinung nach viel zuviel Ressourcen frisst (teilweise >80% CPU)
Ich denke es liegt an der List<Kreis> kreise, die ich benutze und dort immer remove(0) aufrufe.
Hat jemand ne Idee, wie man das Ganze performanter gestalten könnte?
mfg
ich habe das Problem, dass mein kleines, selbstgeschriebenes Programm meiner Meinung nach viel zuviel Ressourcen frisst (teilweise >80% CPU)
Ich denke es liegt an der List<Kreis> kreise, die ich benutze und dort immer remove(0) aufrufe.
Hat jemand ne Idee, wie man das Ganze performanter gestalten könnte?
mfg
Code:
package paintComponentTest;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.ComponentAdapter;
import java.awt.event.ComponentEvent;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
public class PaintComponentTest extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private int x = 20;
private int y = 50;
private int width = 50;
private int height = 50;
private static final int MAX = 750;
private static final int DELAY = 5;
private static final int MAXGROSSE = 250;
private static final int MINGROSSE = 2;
private static final int ABWEICHUNG_X = 3;
private static final int ABWEICHUNG_Y = 3;
private final List<Kreis> kreise = new ArrayList<Kreis>(MAX+1);
private boolean repaintFinished = true;
private boolean rechts = true;
private boolean runter = true;
private boolean groesser = true;
private Color color = Color.BLACK;
private final Random random = new Random();
private double x_max = 0;
private double y_max = 0;
/**
* @param args
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
new PaintComponentTest().setVisible(true);
}
});
}
/**
* This is the default constructor
*/
public PaintComponentTest() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(500, 500);
this.setContentPane(getJContentPane());
this.setTitle("PoingPoing");
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
new Thread(new MyRunnable()).start();
}
private void geheRechts(int a)
{
x += a;
}
private void geheRunter(int a)
{
y+=a;
}
private void werdeGoesser(int a)
{
width+=a;
height+=a;
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
@SuppressWarnings("serial")
protected JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel()
{
@Override
protected void paintComponent(Graphics g)
{
repaintFinished = false;
if(kreise.size() >= MAX || kreise.size() == 0)
super.paintComponent(g);
Graphics2D g2 = (Graphics2D)g;
// g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON );
for(Kreis k : kreise)
{
g2.setColor(k.getColor());
g2.drawOval(k.getX(), k.getY(), k.getWidth(), k.getHeight());
}
repaintFinished = true;
}
};
jContentPane.setLayout(new BorderLayout());
jContentPane.addComponentListener(new ComponentAdapter(){
@Override
public void componentResized(ComponentEvent e)
{
x_max = getJContentPane().getWidth();
y_max = getJContentPane().getHeight();
}
});
}
return jContentPane;
}
class MyRunnable implements Runnable
{
@Override
public void run()
{
while(true)
{
try {
Thread.sleep(DELAY);
color = new Color(random.nextInt(256), random.nextInt(256), random.nextInt(256));
} catch (InterruptedException e) {
e.printStackTrace();
}
if(repaintFinished)
{
if(rechts)
{
if(x >= (x_max - width))
{
rechts = false;
geheRechts(-ABWEICHUNG_X);
}
else
{
rechts = true;
geheRechts(ABWEICHUNG_X);
}
}
else
{
if(x <= 0)
{
rechts = true;
geheRechts(ABWEICHUNG_X);
}
else
{
rechts = false;
geheRechts(-ABWEICHUNG_X);
}
}
if(runter)
{
if(y >= (y_max - height))
{
runter = false;
geheRunter(-ABWEICHUNG_Y);
}
else
{
runter = true;
geheRunter(ABWEICHUNG_Y);
}
}
else
{
if(y <= 0)
{
runter = true;
geheRunter(ABWEICHUNG_Y);
}
else
{
runter = false;
geheRunter(-ABWEICHUNG_Y);
}
}
if(groesser)
{
if(width >= MAXGROSSE)
{
groesser = false;
werdeGoesser(-1);
}
else
{
groesser = true;
werdeGoesser(1);
}
}
else
{
if(width <= MINGROSSE)
{
groesser = true;
werdeGoesser(1);
}
else
{
groesser = false;
werdeGoesser(-1);
}
}
kreise.add(new Kreis(x,y,width, height, color));
if(kreise.size() > MAX)
kreise.remove(0);
getJContentPane().repaint();
}
}//while()
}
}
}