Imagem não aparece

algem sabe me dizer por que imagem não aparece?
package br;

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.ImageIcon;
import javax.swing.JPanel;

public class Imagem extends JPanel implements Runnable {
	
	private ImageIcon im_Pensando = new ImageIcon(getClass().getResource("/joia.gif"));

	public Imagem() {

		System.out.println("UMMMM");
		Thread t = new Thread(this);
		t.start();
	}

	@Override
	public void run() {

try {
	
	
	for(int i =0; i<=10; i++) {
		Thread.sleep(1000);
		System.out.println("OK!!!");
	}
} catch (InterruptedException e) {
	
	e.printStackTrace();
}		
		

	}
	
	public void paintComponent(Graphics g) {
		Image imagem = im_Pensando.getImage();
		g.drawImage(imagem, 0,0,500,500,this);		
	}
}
package br;

import java.awt.BorderLayout;
import java.awt.EventQueue;

import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;

public class PR extends JFrame {

	private JPanel contentPane;
	 static Imagem imagem = new Imagem();

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			public void run() {
				try {
					PR frame = new PR();
					frame.setLayout(null);
					frame.add(imagem);
					frame.setVisible(true);
					
					
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		});
	}

	public PR() {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setBounds(100, 100, 450, 300);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
	}

}

Seu content pane está com layout null então você precisa setar a altura e largura do seu panel Imagem.

OPA APARECEU RERTIREI A ALTURA DO METODO PAINT E ADCIONEI O BOUNDS POREM MINHA IMAGEM E UM GIF E A ANIMAÇAO TA ESTRANHA UMA IMAGEM TA SOBREPOSTA A OUTRA

public PR() {
	setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	setBounds(100, 100, 450, 300);
	contentPane = new JPanel();
	contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
	imagem.setBounds(0, 0, 500, 500);
	contentPane.add(imagem);
	setContentPane(contentPane);
	contentPane.setLayout(null);
	
}

É porque você precisa “limpar” a área de desenho antes de desenhar uma nova imagem.
Antes de pintar a imagem, costumo preencher a área com um retângulo da cor do background do painel.

bom nao sei como vou limpar ainda mas to entendendo vo tentando aqui. obrigado estudo praticamente so aqui, mas vcs do fórum tão me dando uma baita força obrigado, tem ja consigo fazer programas simples e conexão com banco de dados.
por acaso conhece algum grupo de zap para logica em java?

Vai limpar do jeito que eu disse: preenchendo a área do seu JPanel com alguma cor, recomendo usar a cor de fundo do próprio JPanel.

public void paintComponent(Graphics g) {
    Dimension tamanho = getBounds();
    Color corDeFundo = getBackground();

    // limpar a tela
    g.setColor(corDeFundo);
    g.fillRect(0, 0, tamanho.width, tamanho.height);

    // desenhar a imagem
    Image imagem = im_Pensando.getImage();
    g.drawImage(imagem, 0, 0, 500, 500, this);		
}
1 curtida

interessante e bem simples funcionou obrigado vou estudar mais.

1 curtida