Método não funciona para inserir imagem na classe que extende JFrame [RESOLVIDO]

Pessoal peguei um código (segue o link http://javafree.uol.com.br/viewtopic.jbb?t=865627) que colocar uma imagem de fundo no JDesktopPane, segue ai:

import java.awt.Graphics;  
import java.awt.Image;  
import java.awt.Toolkit;  
import javax.swing.JDesktopPane;  
  
public class JDesktopPaneComImage extends JDesktopPane {  
  
   private static final long serialVersionUID = 1L;  
   Image imagem;  
  
   public JDesktopPaneComImage(String caminho) {  
      imagem = Toolkit.getDefaultToolkit().getImage(getClass().getResource(caminho));
   }  
  
    @Override
   public void paintComponent(Graphics g) {  
      super.paintComponent(g);  
      if(imagem != null)   {  
         g.drawImage(imagem, 0, 0, this.getWidth(), this.getHeight(), this);   
      }  
   }  
}

E testando com esse código funciona legal:

public class Teste{

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        
        JFrame teste = new JFrame();
        JDesktopPane d = new JDesktopPaneComImage("desktopSisGEAC.jpg");
        teste.setSize(400, 400);
        teste.setExtendedState(JFrame.MAXIMIZED_BOTH);
        teste.add(d);
        teste.setVisible(true);
    }

Sendo que eu tenho uma classe que extende javax.swing.JFrame e coloco o código que substitui a imagem no construtor, simplesmente não funciona, segue o código:

import javax.swing.JDesktopPane;
import javax.swing.JFrame;

/**
 *
 * @author JUNIOR
 */
public class GUIPrincipal extends javax.swing.JFrame {

    /**
     * Creates new form GUIPrincipal
     */
    
    public GUIPrincipal(){
        initComponents();
        
        this.desktop = new JDesktopPaneComImage("desktopSisGEAC.jpg");
        this.setExtendedState(JFrame.MAXIMIZED_BOTH);
        this.setLocationRelativeTo(null);
        this.add(this.desktop);
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        desktopPane = new javax.swing.JDesktopPane();
        menuBar = new javax.swing.JMenuBar();
        menuArquivo = new javax.swing.JMenu();
        itemDeMenuImportaBase = new javax.swing.JMenuItem();
        itemDeMenuExportaBase = new javax.swing.JMenuItem();
        jSeparator1 = new javax.swing.JPopupMenu.Separator();
        itemDeMenuSair = new javax.swing.JMenuItem();
        menuCadastro = new javax.swing.JMenu();
        itemDeMenuExame = new javax.swing.JMenuItem();
        itemDeMenuCadPaciente = new javax.swing.JMenuItem();
        itemDeMenuCadProfissional = new javax.swing.JMenuItem();
        itemDeMenuCadUsuario = new javax.swing.JMenuItem();
        menuRelatorio = new javax.swing.JMenu();
        itemDeMenuGeral = new javax.swing.JMenuItem();
        itemDeMenuPaciente = new javax.swing.JMenuItem();
        itemDeMenuProfissional = new javax.swing.JMenuItem();
        itemDeMenuUsuario = new javax.swing.JMenuItem();
        menuAjuda = new javax.swing.JMenu();
        itemDeMenuSobre = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SisGEAC - Versã 2.0");

        menuArquivo.setMnemonic('f');
        menuArquivo.setText("Arquivo");

        itemDeMenuImportaBase.setMnemonic('o');
        itemDeMenuImportaBase.setText("Importar...");
        menuArquivo.add(itemDeMenuImportaBase);

        itemDeMenuExportaBase.setMnemonic('s');
        itemDeMenuExportaBase.setText("Exportar...");
        menuArquivo.add(itemDeMenuExportaBase);
        menuArquivo.add(jSeparator1);

        itemDeMenuSair.setMnemonic('x');
        itemDeMenuSair.setText("Sair");
        itemDeMenuSair.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemDeMenuSairActionPerformed(evt);
            }
        });
        menuArquivo.add(itemDeMenuSair);

        menuBar.add(menuArquivo);

        menuCadastro.setMnemonic('e');
        menuCadastro.setText("Cadastro");

        itemDeMenuExame.setText("Exame");
        menuCadastro.add(itemDeMenuExame);

        itemDeMenuCadPaciente.setMnemonic('t');
        itemDeMenuCadPaciente.setText("Paciente");
        menuCadastro.add(itemDeMenuCadPaciente);

        itemDeMenuCadProfissional.setMnemonic('y');
        itemDeMenuCadProfissional.setText("Profissional");
        menuCadastro.add(itemDeMenuCadProfissional);

        itemDeMenuCadUsuario.setMnemonic('p');
        itemDeMenuCadUsuario.setText("Usuário");
        menuCadastro.add(itemDeMenuCadUsuario);

        menuBar.add(menuCadastro);

        menuRelatorio.setText("Relatório");

        itemDeMenuGeral.setText("Geral (tipo de exame)");
        menuRelatorio.add(itemDeMenuGeral);

        itemDeMenuPaciente.setText("Paciente");
        menuRelatorio.add(itemDeMenuPaciente);

        itemDeMenuProfissional.setText("Profissional");
        menuRelatorio.add(itemDeMenuProfissional);

        itemDeMenuUsuario.setText("Usuario");
        menuRelatorio.add(itemDeMenuUsuario);

        menuBar.add(menuRelatorio);

        menuAjuda.setMnemonic('h');
        menuAjuda.setText("Ajudar");

        itemDeMenuSobre.setMnemonic('a');
        itemDeMenuSobre.setText("Sobre");
        itemDeMenuSobre.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                itemDeMenuSobreActionPerformed(evt);
            }
        });
        menuAjuda.add(itemDeMenuSobre);

        menuBar.add(menuAjuda);

        setJMenuBar(menuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(desktopPane, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE)
        );

        pack();
    }// </editor-fold>                        

    private void itemDeMenuSairActionPerformed(java.awt.event.ActionEvent evt) {                                               
        System.exit(0);
    }                                                                                             

    // Variables declaration - do not modify                     
    private javax.swing.JDesktopPane desktopPane;
    private javax.swing.JMenuItem itemDeMenuCadPaciente;
    private javax.swing.JMenuItem itemDeMenuCadProfissional;
    private javax.swing.JMenuItem itemDeMenuCadUsuario;
    private javax.swing.JMenuItem itemDeMenuExame;
    private javax.swing.JMenuItem itemDeMenuExportaBase;
    private javax.swing.JMenuItem itemDeMenuGeral;
    private javax.swing.JMenuItem itemDeMenuImportaBase;
    private javax.swing.JMenuItem itemDeMenuPaciente;
    private javax.swing.JMenuItem itemDeMenuProfissional;
    private javax.swing.JMenuItem itemDeMenuSair;
    private javax.swing.JMenuItem itemDeMenuSobre;
    private javax.swing.JMenuItem itemDeMenuUsuario;
    private javax.swing.JPopupMenu.Separator jSeparator1;
    private javax.swing.JMenu menuAjuda;
    private javax.swing.JMenu menuArquivo;
    private javax.swing.JMenuBar menuBar;
    private javax.swing.JMenu menuCadastro;
    private javax.swing.JMenu menuRelatorio;
    // End of variables declaration                   
    private JDesktopPane desktop;
}

A referida Classe é chamada na seguinte classe Principal:

import java.io.IOException;
import net.mastersoft.sisgeac.visao.gui.GUIPrincipal;

public class Principal {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        
        GUIPrincipal guiPrincipal = new GUIPrincipal();
        guiPrincipal.setVisible(true);
    }
}

Porque dessa forma a imagem não esta sendo carregada?

Você leu todo o tópico :?:

Porque vendo rapidamente pude notar que o caminho da imagem é a url completa:

:thumbup:

InicianteJavaHenrique, vou dar um modificada no caminho e testar, em breve estarei retornando.

Valeu!

InicianteJavaHenrique coloquei o caminho do arquivo e não funcionou, o que tenho percebido é que o objeto que é criando dentro do main recebe o JDesktopPane e o objeto que vem de uma classe não aceita, como a referida acima (GUIPrincipal). Até então não consegui entender o que deve esta acontecendo.

Pessoal será que tem haver com o JDesktopPane que é criado pelo Netbeans que não aceita ser modificado? Porque quando crio e adiciono no JFrame (que também criado) carrega a imagem conforme deve ser.

Ai eu já não sei :wink:

:thumbup:

InicianteJavaHenrique e pessoal de tanto pesquisar por aqui, li que alguns componentes só pode ser modificados editando o initComponents(), com devidos cuidados, pois qualquer código alterado ou apagado pode fazer que anomalias apareça na sua aplicação, então, resolvi arriscar e deu certo, vejam como uma simples alteração modificou o plano de fundo do JDesktopPane:

[code]
private void initComponents() {

    desktopPane = new javax.swing.JDesktopPane();//Instância do JDesktopPane
    ...//Várias linhas de códigos criados pelo próprio Netbeans
    //desktopPane.setBackground(new java.awt.Color(0, 153, 204));//Plano de fundo com a cor, apenas comentei
    desktopPane = new JDesktopPaneComImage("desktopSisGEAC.jpg");//Adicionei o comportamento da classe filha criada (acima tem o exemplo)
    ...//Várias outras linhas de códigos
    pack();

}[/code]

Bom pessoal foi assim que encontrei a solução e agradeço a todos.
Valeu e até mais, qualquer dúvida é só postar.