[Resolvido] JDesktopPane atualização de background em tempo de execução

Olá amigos desenvolvedores,

estou na luta tentando criar um JDesktopPane que altere seu background em tempo de execução (igual ao desktop do windows), pois eu consigo alterar o background desde que eu reinicie o programa, ou seja, se eu executar o sistema com a figura 1 como background e tentar alterar para figura 2 durante a execução, a mesma não ocorre, funcionando somente após eu iniciar o sistema novamente.

Esta é a classe do meu JDesktopPane

package gui.utils;

import controle.ControleArquivoPreferencias;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import javax.swing.JDesktopPane;

/**
 *
 * @author maycon
 */
public class MyDesktopPanel extends JDesktopPane {

    private static final long serialVersionUID = 1L;
    Image img;

    public MyDesktopPanel() {

        String path = new ControleArquivoPreferencias().getImagemDesktop();

        try {
            img = javax.imageio.ImageIO.read(new java.net.URL(getClass().getResource(path), path));
            this.repaint();
        } catch (Exception e) {
        }//do nothing  
    }

    public MyDesktopPanel(String path) {
        try {
            img = javax.imageio.ImageIO.read(new java.net.URL(getClass().getResource(path), path));
            this.repaint();
        } catch (Exception e) {
        }//do nothing  
    }

    @Override
    public void paintComponent(Graphics g) {

        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D) g.create();

        if (img != null) {
            
            //Dimension dimension = this.getSize();
            //int x = (int) (dimension.getWidth() - img.getWidth(this)) / 2;
            //int y = (int) (dimension.getHeight() - img.getHeight(this)) / 2;
            //g.drawImage(img, x, y, img.getWidth(this), img.getHeight(this), this);

            g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);
            g2d.dispose();

        } else {
            g2d.drawString("Imagem não encontrada", 50, 50);
        }
    }
}

Aqui é o método onde eu “tento” realizar a atualização do background em tempo de execução:
Eu recupero de um arquivo qual é a figura de background e tento atualizar o desktop a partir da última linha deste exemplo:

    /**
     * Armazena as preferencias definidas nos componentes da GUI
     * @param comboTransacoes 
     */
    public void salvaPreferencias(JComboBox comboTransacoes, JComboBox comboImagem) {

        /*Parametro de tempo de duracao dos registros de transacoes dos usuarios*/
        arquivo.writeLine(pathArquivo, 0, comboTransacoes.getSelectedItem().toString());

        /*Parametro da imagem de desktop*/
        arquivo.writeLine(pathArquivo, 1, comboImagem.getSelectedItem().toString() + ".png");
        //Carrega a nova imagem no desktop
        FramePrincipal.desktopPanel = new gui.utils.MyDesktopPanel(comboImagem.getSelectedItem().toString() + ".png");
    
    }

Obrigado.

Resolvido:

Realizadas as devidas alterações, o código ficou assim:

/* 
 * To change this template, choose Tools | Templates 
 * and open the template in the editor. 
 */  
package gui.utils;  
  
import controle.ControleArquivoPreferencias;  
import java.awt.Dimension;  
import java.awt.Graphics;  
import java.awt.Graphics2D;  
import java.awt.Image;  
import javax.swing.JDesktopPane;  
  
/** 
 * 
 * @author maycon 
 */  
public class MyDesktopPanel extends JDesktopPane {  
  
    private static final long serialVersionUID = 1L;  
    Image img;  
  
    public MyDesktopPanel() {  
  
        String path = new ControleArquivoPreferencias().getImagemDesktop();  
        this.setImgBackground(path);  
          
    }  
  
    public MyDesktopPanel(String path) {  
        this.setImgBackground(path);  
    }  
      
    public void setImgBackground(String path){  
        try {  
            img = javax.imageio.ImageIO.read(new java.net.URL(getClass().getResource(path), path));  
            this.repaint();  
        } catch (Exception e) {  
        }//do nothing    
    }  
  
    @Override  
    public void paintComponent(Graphics g) {  
  
        super.paintComponent(g);  
        Graphics2D g2d = (Graphics2D) g.create();  
  
        if (img != null) {  
              
            //Dimension dimension = this.getSize();  
            //int x = (int) (dimension.getWidth() - img.getWidth(this)) / 2;  
            //int y = (int) (dimension.getHeight() - img.getHeight(this)) / 2;  
            //g.drawImage(img, x, y, img.getWidth(this), img.getHeight(this), this);  
  
            g2d.drawImage(img, 0, 0, this.getWidth(), this.getHeight(), this);  
            g2d.dispose();  
  
        } else {  
            g2d.drawString("Imagem não encontrada", 50, 50);  
        }  
    }  
}  
    /** 
     * Armazena as preferencias definidas nos componentes da GUI 
     * @param comboTransacoes  
     */  
    public void salvaPreferencias(JComboBox comboTransacoes, JComboBox comboImagem) {  
  
        /*Parametro de tempo de duracao dos registros de transacoes dos usuarios*/  
        arquivo.writeLine(pathArquivo, 0, comboTransacoes.getSelectedItem().toString());  
  
        /*Parametro da imagem de desktop*/  
        arquivo.writeLine(pathArquivo, 1, comboImagem.getSelectedItem().toString() + ".png");  
        //Carrega a nova imagem no desktop  
        FramePrincipal.desktopPanel.setImgBackground(comboImagem.getSelectedItem().toString() + ".png");  
      
    }