[Resolvido]Como utilizar BufferStrategy em imagens carregadas exteriormente

Olá pessoal, tudo bom?

Estou com uma dificuldade em uns testes de Buffer que estou fazendo.
No momento estou importando uma imagem PNG para seguir o cursor do mouse dentro de uma JFrame, mas ela pisca constantemente por não ter nenhum buffer.
Estou utilizando o createBufferStrategy(num) para amenizar isso. Já consegui fazer com imagens que eu mesmo contruí por código, mas com imagens externas não consigo.

O código:

[code]import java.awt.event.;
import javax.swing.
;
import java.awt.;
import java.awt.image.
;
import java.io.;
import javax.imageio.
;

public class BufferImagem extends JFrame implements MouseMotionListener{
int dimX, dimY, curX, curY;
Image imagem;

public BufferImagem() throws IOException {
    super("Teste com Buffer Duplo com Imagem");
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    dimX = 600;
    dimY = 600;
    setVisible(true);
    setResizable(false);
    setBounds(350,250,dimX,dimY);
    addMouseMotionListener(this);
    createBufferStrategy(2);

    String minhaImagem = "C:/Users/Vítor Batista/Desktop/Imagem.png";
    Toolkit toolkit = Toolkit.getDefaultToolkit();
    imagem = toolkit.getImage(minhaImagem);
    MediaTracker mediaTracker = new MediaTracker(this);
    mediaTracker.addImage(imagem, 0);
}    

public void paint(Graphics g){
    BufferStrategy bf = this.getBufferStrategy();

    try{
        //g = bf.getDrawGraphics(); //Aqui está o problema. 
        //Quando tento adicionar o BufferStrategy, a imagem não aparece. Sem essa linha a imagem fica piscando.
        g.clearRect(0,0,dimX,dimY);
        g.drawImage(imagem, curX, curY, null);
    }finally{
        g.dispose();
    }

}

public void mouseDragged(MouseEvent e) {
    curX = e.getX();
    curY = e.getY();
    repaint();
}

public void mouseMoved(MouseEvent e) {
    curX = e.getX();
    curY = e.getY();
    repaint();
}

}[/code]

Qual seria a solução?
Agradeço a atenção.

  1. Não use o MediaTracker, use o ImageIO;
    http://www.pontov.com.br/site/index.php/java/48-java2d/111-trabalhando-com-imagens

  2. Se você for usar o BufferStrategy, você deve usar escrita direta e não o método paint:
    http://www.pontov.com.br/site/index.php/java/48-java2d/124-desenho-direto-active-rendering

  3. Se você não for usar o BufferStrategy, você deve usar o paintComponent e não o paint.

  4. Aproveite e leia com atenção todos os tutoriais de Java2D do ponto V, em especial sobre o loop de animação:
    http://www.pontov.com.br/site/index.php/java/48-java2d

Opa!

Valeu ViniGodoy, vou ver esses links agora mesmo.
Sobre o ImageIO, eu estava até usando antes, mas depois eu mudei para o MediaTraker pensando que ai dar certo. Até tinha importado o javax.imageio

Abraços.

Li sobre o conteúdo que estava no link, achei bem interessante. Mas ainda estou com dúvida.

Alterei o paint(Graphics g) para desenhar():

[code]public void desenhar(){
Graphics g = getBufferStrategy().getDrawGraphics();

    try{
        g.clearRect(0,0,dimX,dimY);
        g.drawImage(imagem, curX, curY, null);
        getBufferStrategy().show();
    }finally{
        g.dispose();
    }

}[/code]

E substitui o ToolKit pelo ImageIO:

String minhaImagem = "C:/Users/Vítor Batista/Desktop/TrollFace.png"; //Não coloquei Try/Catch porque não preciso saber se já carregou. BufferedImage imagem = ImageIO.read(new File(minhaImagem));

Mas a imagem não exibe, pesquisei na Biblioteca Oracle do Java e não encontrei algo que exibia na tela a imagem.
Estou me perguntando se o “g.drawImage(imagem, curX, curY, null);” é válido para o que estou fazendo.

Edit--------------------------------------------------------------------------------------------------

Mal postei e aterei umas coisas aqui e acabei conseguindo efetuar o Buffer.

public String minhaImagem = "C:/Users/Vítor Batista/Desktop/TrollFace.png"; public BufferedImage imagem = ImageIO.read(new File(minhaImagem));

Só tive que jogar essas linhas no construtor do JFrame como publico.

Agradeço pela ajuda.
Flw.