Boa noite.
Li alguns vários tópicos sobre o assunto, mas nenhum deles resolveu meu problema… Usando exemplos de outros tópicos, as classes construídas pelos usuários até funcionam, mas na minha classe não.
Bom, no formulário cujo código vem abaixo, estou tentando inserir uma imagem em uma JLabel e usar essa JLabel como papel de parede do formulário. Acontece que, tente o que quer que seja, a imagem não é exibida.
Por favor, se possível apontem onde está a falha ou me dêem indicações e conselhos.
Obs: estou usando uma ferramenta de desenvolvimento básica, com o objetivo de melhorar meus conhecimentos. Não existe interface gráfica, tudo o que está ai eu que digitei e tudo o que for novo deve ser digitado.
Obrigado.
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
public class MenuPrincipal extends JFrame implements ActionListener{
JButton btnPassageiro, btnAeronave, btnVoo, btnPassagem, btnSair, btnAjuda;
JLabel lblMenuPrincipal, lblBackground;
JMenuBar mnbMenuPrincipal;
JMenu mnuOpcoes, mnuEncerrar;
JMenuItem mniMensagem1, mniMensagem2;
Icon background;
public static void main(String[] args) {
MenuPrincipal inicial = new MenuPrincipal();
inicial.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
}
public MenuPrincipal(){
Panel pnlMenu_Principal = new Panel();
Container contMenuPrincipal = getContentPane();
contMenuPrincipal.setLayout(null);
lblMenuPrincipal = new JLabel("iFly - Menu Principal");
background = new ImageIcon("views\\fundo.jpeg");
lblBackground = new JLabel("",background, JLabel.LEFT);
// também tentei as linhas abaixo
// lblBackground = new JLabel();
// lblBackground.setIcon (background);
lblBackground.setVisible(true);
contMenuPrincipal.add(lblBackground);
setTitle("Menu Principal");
setSize(800,600);
setVisible(true);
setResizable(false);
}
}
Usando o código acima (já tinha inclusive encontrado na internet e testado), recebo uma mensagem de Null Pointer Exception, mas não consigo identificar que objeto pode ter uma referência nula…
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at views.MenuPrincipal.<init>(MenuPrincipal.java:30)
at views.MenuPrincipal.main(MenuPrincipal.java:17)
public MenuPrincipal(){
Panel pnlMenu_Principal = new Panel();
Container contMenuPrincipal = getContentPane();
contMenuPrincipal.setLayout(null);
lblMenuPrincipal = new JLabel("iFly - Menu Principal");
labelImage.setIcon(new javax.swing.ImageIcon(getClass().getResource("C:\\Documents and Settings\\mobarreto\\Meus documentos\\Minhas imagens\\dilbert.jpg")));
contMenuPrincipal.add(labelImage);
NullPointer se dá qdo vc quer “pegar” alguma coisa que não foi instanciada. Ex: Image image; criei o objeto image mas não inicializei ele, daí se tentar usar ele dah erro de NullPointer saka?
labelImage.setIcon(new javax.swing.ImageIcon(getClass().getResource("C:\\Documents and Settings\\mobarreto\\Meus documentos\\Minhas imagens\\dilbert.jpg")));
O stacktrace é o:
Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(ImageIcon.java:205)
at views.MenuPrincipal.<init>(MenuPrincipal.java:30)
at views.MenuPrincipal.main(MenuPrincipal.java:17)
Eu tive este problema para pegar uma imagem e inserir numa label resolvi da seguinte maneira.
Clique na pasta pacote de código fonte e crie uma pasta com o seguinte nome resources , vc verá que a pasta irá ficar o o nomeDoPacote.resources , salve sua figura aí dentro agora na nora de configurar no código vai ficar da seguinte maneira logo = new ImageIcon(getClass().getResource("/nomeDoPacote/resources/logo.png"));.
Isso garante também que quando salvar seu projeto para instalar em outro pc depois de finalizado ele irá levar no pacote as classes e os recursos de imagem. já devidamente zipados e prontos para uso.