Animationen - laggen beheben

Hi Leute
ich weiß nicht warum, aber ich bekomme immer noch keine wirklcih flüssigen animationen hin.
Ich versteh einfach nicht was ich falsch mache.
Ausserdem würde ich gerne erstmal auf active rendering verzichten, weil ich ja weiß das die methode
die ich die ganze zeit benutze eigentlich total problemlos klappen müsste.

Jedenfalls hier der code:

code
[spoiler]

package de.skysoldier.intro;

import java.awt.AlphaComposite;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class Intro extends JPanel implements Runnable {
	
	private BufferedImage crest;
	private double aspectRatio;
	private double crestHeight;
	private double crestX;
	private double crestY;
	private double angle;
	private int alpha;
	
	public Intro(){
		JFrame f = new JFrame();
		f.setExtendedState(JFrame.MAXIMIZED_BOTH);
		f.setLocationRelativeTo(null);
		f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		f.add(this);
		init();
		f.setVisible(true);
	}
	
	public void init(){
		crest = getImage("crest.png");
		aspectRatio = (double) crest.getWidth() / (double) crest.getHeight();
		crestHeight = 20;
		crestX = getWidth() / 2 - crestHeight / 2;
		alpha = 200;
		new Thread(this).start();
	}
	
	public void run(){
		long thisF;
		long lastF = System.currentTimeMillis();
		long delta;
		double v = 1;
		while(true){
			thisF= System.currentTimeMillis();
			delta = thisF - lastF;
			lastF = thisF;
			crestHeight += v * 0.05 * delta;
			crestX = getWidth() / 2 - crestHeight / 2;
			repaint();
			v += 0.05;
			angle +=0.005;
			if(alpha > 0){
				System.out.println(alpha);
				alpha--;
			}
			try{Thread.sleep(15);}catch(Exception e){}
		}
	}
	
	public void paintComponent(Graphics g){
		super.paintComponent(g);
		Graphics2D g2d = (Graphics2D) g;
		g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
		g2d.rotate(angle, (int) crestX, (int) crestY);
		g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, (float) alpha / 200));
		g2d.drawImage(crest, (int) crestX, (int) crestY, (int) (crestHeight * aspectRatio), (int) crestHeight, this);
	}
	
	public BufferedImage getImage(String name){
		try{
			return ImageIO.read(getClass().getClassLoader().getResource("intro/" + name));
		}
		catch(Exception e){
			e.printStackTrace();
			return null;
		}
	}
	
	public static void main(String[] args) {
		new Intro();
	}
}

[/spoiler]

und hier das bild was dort verwendet wird:
http://www.file-upload.net/download-8408282/Wappen_ZW_15-12.13_trans..png.html

Also hier laggt da erstmal nichts… vielleicht mal

    public BufferedImage getImage(String name){
        try{
            BufferedImage image =ImageIO.read(getClass().getClassLoader().getResource(name));
            return convertToARGB(image);
        }
        catch(Exception e){
            e.printStackTrace();
            return null;
        }
    }

    public static BufferedImage convertToARGB(BufferedImage image)
    {
        BufferedImage newImage = new BufferedImage(
            image.getWidth(), image.getHeight(),
            BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = newImage.createGraphics();
        g.drawImage(image, 0, 0, null);
        g.dispose();
        return newImage;
    }

probieren. Nur ein Strohhalm.