Através de pesquisas no Google e aqui no forum mesmo, criei uma classe para desenhar o fundo de tela num desktopframe. Até ai tudo bem, ela funciona direitinho quando estou depurando o projeto. Ele abre, mostra a imagem de fundo e coloca tudo no seu devido lugar.
O problema começa quando construo o projeto. Ele simplesmente dá erro, um erro que só aparece se tento executa-lo em cmd.
A rotina que origina o problema é esta :
package ta01;
import java.awt.Graphics;
import java.awt.MediaTracker;
import javax.swing.ImageIcon;
import javax.swing.JDesktopPane;
/**
*
* @author Dario
*/
public class DecoratedDesktopPane extends JDesktopPane {
private static final long serialVersionUID = -8687762508784540862L;
private ImageIcon image;
private MediaTracker tracker;
public DecoratedDesktopPane(String caminhoImagem) {
image = new ImageIcon(this.getClass().getResource(caminhoImagem));
tracker = new MediaTracker(this);
tracker.addImage(image.getImage(), 0);
try {
tracker.waitForID(0);
} catch (InterruptedException exception) {
exception.printStackTrace();
} // Finaliza o bloco try/catch.
} // Finaliza o construtor de objetos da classe JDecoratedDesktopPane.
public void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
// Desenha a imagem e a centraliza no componente.
graphics.drawImage(image.getImage(),
this.getWidth()/2 - image.getImage().getWidth(this)/2,
this.getHeight()/2 - image.getImage().getHeight(this)/2,
this.getBackground(), this);
} // Finaliza o método paintComponent.
} // Finaliza a classe DecoratedDesktopPane.
Ocorre um erro de NullPointerException na linha 23 onde ocorre a chamada do parametro que referencia a imagem.
A chamada inicial da classe ocorre aqui :
public jPegasus() {
setTitle("Pegasus");
setIconImage(new ImageIcon(getClass().getResource("/imagens/PEGASUS1.jpg")).getImage());
initComponents();
variaveis.rota = "d:/pegasus";
setTitle("Pegasus");
setIconImage(new ImageIcon(getClass().getResource("/imagens/STAR5.gif")).getImage());
this.setExtendedState(JFrame.MAXIMIZED_BOTH);
jMenuBar1.setEnabled(false);
DecoratedDesktopPane pane = new DecoratedDesktopPane("/imagens/telax.jpg");
pane.setLocation(50, 50);
this.setContentPane(pane);
variaveis.painel = pane;
//**************************
Alguem poderia me ajudar ?
Como faço para transformar esta classe num objeto que apareça na toolbar ? Tipo algo assim como uma ocx do VB ?
Soliução do problema:
Curiosamente o que impedia o funcionamento é o nome do arquivo de imagem. Ele esta referenciado como "/imagens/telax.jpg", o que em principio corresponde ao nome de fato do arquivo existente no classpath. Entretanto, no classpath o arquivo tem sua terminação escrita em maiusculas, ou seja "/imagens/telax.JPG", dai a classe não o encontrar na execução. Foi só corrigir e pronto, funcionou direitinho.
Agradecimentos imensos ao ViniGodoy pela dica, sem ela eu não teria chegado a lugar nenhum.