Splash Screen, JLabel, Imagem não aparece endereço está correto!

Olá Pessoal eu estou precisando de uma ajuda ae que seria muito útil ficaria muito grato se me ajudassem…
Eu começei a fazer etec de informática no começo deste ano, e adorei muito programação eu realmente achei com o quê eu quero trabalhar mas enfim. Vamos direto ao assunto XD

Eu estou fazendo uma tela de splash para um programa que vai ser para um mercado, estou usando JLabel e uma JProgressBar,e também o grid layout só que o problema é que minha imagem no JLabel não aparece ,aparece apenas quando eu aumento a janela clicando e arrastando, o tamanho da janela eu acho que não seja o problema pois eu já coloquei centenas de sizes… e mesmo assim está com esse bug, o endereço está correto isso é certaza, o quê ocorre?

Eis o código


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.HeadlessException;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JProgressBar;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Rafael
 */
public class SplashInicio extends JFrame{

    public SplashInicio() throws HeadlessException {
 
    		
	this.setLayout(new BorderLayout());
	    this.setSize(1150,460);
	    this.setVisible(true);
	    this.setEnabled(true);
	    this.setLocationRelativeTo(null);

	
	Container cSplash = getContentPane();
	
	JLabel imagem = new JLabel();
	imagem.setIcon(new ImageIcon("C:\\Users\\Rafael\\Documents\\NetBeansProjects\\Estudo\\src\\Res\\Splash.png"));
	imagem.setSize(1100,450);
	imagem.setVisible(true);
	imagem.setEnabled(true);
        imagem.setBorder(BorderFactory.createLineBorder(Color.BLACK, 5));
        
	JProgressBar carregando= new JProgressBar();
   carregando.setSize(1100, 25);
   carregando.setBackground(new Color(0,80,0,0));
   carregando.setVisible(true);
   carregando.setBorderPainted(true);
   carregando.setEnabled(true);
   carregando.setValue(30);
   
   cSplash.add(imagem,BorderLayout.NORTH);
   cSplash.add(carregando,BorderLayout.SOUTH);
   
       
        
        for(int i =0; i<=100;i++){
            
            try{
                Thread.sleep(30);
                carregando.setValue(i);

            }catch(InterruptedException e){
                
            }
            

        }
//======================= Abrir Janela de Login ================================================
        JanelaPrincipal app = new JanelaPrincipal(); 
        app.setVisible(true);
        this.setVisible(false);
        this.setEnabled(false);
}
}

O ideal é que a imagen a ser carregada esteja na pasta do projeto.

ImageIcon imageIcon = new ImageIcon(getClass().getResource("imagem.png"));        
jLabelSplashImage.setIcon(imageIcon);

Eu tentei adicionar a JLabel dentro de um JPanel, unto com o progress bar mas mesmo assim os objetos não aprecem apenas aparecem qaundo eu redimensiono a janela o quê é isso ? porfavor me digam porquê os dois objetos só aprecem quando eu redimensiono ? eu já mduei as coordenadas centenas de vezes mas mesmo assim…
simplifiquei para a única parte que interessa .

Pessoal eu sou iniciante por favor ajudem me.

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JProgressBar;


public class SplashInicio extends JFrame{

	public SplashInicio(){
		setLayout(new GridLayout(1, 1));
	    this.setSize(865,400);
	    this.setVisible(true);
	    this.setEnabled(true);
	    this.setLocationRelativeTo(null);

	
	JPanel cSplash = new JPanel();
	
	JLabel imagem = new JLabel();
	imagem.setIcon(new ImageIcon("res\\Splash.jpg"));
	imagem.setSize(840,300);
	imagem.setVisible(true);

	JProgressBar carregando= new JProgressBar();
   carregando.setSize(838, 20);
   carregando.setVisible(true);

   carregando.setValue(50);
   
   cSplash.setLayout(null);
   cSplash.setSize(840, 340);
   cSplash.add(imagem);
   cSplash.add(carregando);
   this.add(cSplash);
 

   
		
		
	}
		
}

Desde o Java 6, a forma mais eficiente e fácil de fazer um SplashScreen é essa:
http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javase6/splashscreen/

Não exige uma linha de código sequer.

Outra coisa, provavelmente é aquela gambi de for ali que está travando sua tela. Você não pode congelar a Thread do Swing, ou então, sua interface ficará travada.
Se quiser fazer aquela espera, use um Timer.

Muito Obrigado ViniGodoy .
Eu estava vendo um vídeo sobre como criar um jogo de nave em java no youtube e então eu ví a lógica que o cara lá usou, usando um timer e uma classe com extends JPanel e implements action listener e coloquei na minha classe de splash e dentro do construtor da classe principal , então eu coloquei o painel e depois adicionei a barra de progresso. ficou assim;

Classe Splash Inicio.


import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.Timer;



public class SplashInicio extends JPanel implements ActionListener {
	
	private Image fundo;
	private Timer tempo;
	
	public SplashInicio(){
		
		ImageIcon referencia = new ImageIcon("res\\Splash.png");
		fundo=referencia.getImage();
	this.setBackground(Color.black);
	this.setSize(500,165);
	this.setVisible(true);
	this.setEnabled(true);
	this.setLayout(null);

	tempo= new Timer(5, this);
  	tempo.start();
	 
	
	}
	
	public void paint(Graphics g){
		
		Graphics2D imagem = (Graphics2D)g;
		g.drawImage(fundo, 0, 0, null);
		
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		repaint();
		
	}
	
	
}

Classe Principal

import java.awt.Color;

import javax.swing.JProgressBar;
import javax.swing.JWindow;



public class Principal extends JWindow{
private int i=0;
	public Principal(){

		//this.setExtendedState(MAXIMIZED_BOTH); Pegar tamanho máximo da imagem!
		this.setLayout(null);
		this.setVisible(true);
		this.setSize(500, 180);
		this.setLocationRelativeTo(null);
		JProgressBar carregando = new JProgressBar();
		carregando.setSize(480, 15);
		carregando.setLocation(10,165);
		carregando.setStringPainted(true);
		carregando.setBorderPainted(false);
		carregando.setBackground(new Color(100, 100, 0, 0));
		getContentPane().add(carregando);
		getContentPane().add(new SplashInicio());

		
	for(i=0;i<=100;i++){
		
		try{
			Thread.sleep(20);
			carregando.setValue(i);
		}catch(InterruptedException e){
			System.out.print("Error");
		}
	}

 System.exit(1);
 
		
	}

	


	public static void main(String[] args) {
	
		
		Principal app = new Principal();
		
 
	
}
}

Ficou extenso para uma coisa que era para ser muito simples mas foi a única forma que eu consegui , eu não consigo usar o método paint de jeito nenhum a não ser que seja usando o timer e action listener e actionperfomerd
Obrigado pela ajuda de quem postou aqui!

Você quer criar um jogo? Então leia:
http://pontov.com.br/site/java/47-javageral/92-conhecendo-o-jframe
http://pontov.com.br/site/java/48-java2d

Tem esse tutorial rápido também, que é bom:
http://www.cokeandcode.com/info/tut2d.html

Cara muito obrigado por sua ajuda , bom eu queria fazer essa telinha de splash para um sistema de mercado que eu e meu amigo vamos fazer para o tcc da etec , mas eu também me interesso muito em criar jogos principalmente em C com bibliotecas sdl e allegro mas não estou com disposição de aprender java e sdl ou allegro ao mesmo tempo então vou esperar mais um bocado , e gostei muito dos tudos de jogos 2 d em java neste final de seman irei dar uma olhada.

Sobre o sistema que eu e meu amigos estamos fazendo para o mercado eu poderia abrir um tópico apenas para as pessoas me ajudarem com isso com sugestões , dicas e me ajudando com os problemas ?

Claro