Classe só funciona em depuração (RESOLVIDO)

1 resposta
DAREK6920

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.

1 Resposta

ViniGodoy

Esse nullPointerException indica que o arquivo telax.jpg não está dentro da pasta imagens do seu .jar.

Ou então, há uma diferença no nome. Verifique se as letras maiúsculas/minúsculas são identicas, pois o .jar, diferente do Windows, diferencia as duas coisas.

Criado 14 de julho de 2011
Ultima resposta 14 de jul. de 2011
Respostas 1
Participantes 2