Não estou conseguindo carregar imagens no JLabel

28 respostas
swing
marcoslogan

Boa tarde pessoal.

Estou com um probleminha aqui, recentemente resolvi voltar pro swing (só para praticar mesmo), coloquei uma imagem no projeto e setei no JLabel, só que tá dando uma NullPointerException. Coloquei a imagem dentro de uma pasta, deu o mesmo problema, e até na mesma pasta, o resultado foi o mesmo. Fiz uma pesquisa e não encontrei a solução. Estou usando o Java 16 e o NetBeans 12.5.

PS: Criei o projeto com o Ant. Por exemplo no NetBeans 8.2, não tenho esse tipo de problema. Acho que deve ser algum bug do NetBeans ou do Java.

28 Respostas

Lucas_Camara

Será que o NullPointer não está acontecendo pq a imagem não está sendo encontrada no classpath?

marcoslogan

Tenho que criar o ClassPath do Java para fazer funcionar? Em versões anteriores eu não tinha necessidade de fazer isso.

staroski

Não.
Classpath é o caminho onde sua aplicação procura as classes para carregar, você só tem que garantir que sua imagem está no classpath de sua aplicação.

Posta o código de como você está carregando a imagem.
Está usando o getResourceAsStream?

marcoslogan

Estou fazendo pelo NetBeans. No caso é o próprio NetBeans que gera o código. Eu só indico onde está o arquivo.

marcoslogan

Não estou usando o get ResourceAsString. Estou usando o ImageIcon. Para isso passo o getClass().getResource(“imagem.jpg”). O NetBeans gera esse código.

Lucas_Camara

Vc consegue mandar a estrutura de pastas do seu projeto indicando a pasta onde a imagem está?

staroski

Troca por getClass().getResourceAsStream("/imagem.jpg"), senão não vai funcionar quando você gerar um JAR.

Perceba o / no início do caminho, isso garante que a busca é feita a partir da raíz do classpath de sua aplicação.

Programadores escrevem código muito melhor que o NetBeans. :smile:

marcoslogan

No momento estou em outro computador, mas sei a estrutura de pastas. No projeto estou desenvolvendo usando o MVC, todas as telas do sistema estou deixando dentro do pacote view. Dentro desse pacote criei uma pasta img e copiei a imagem para lá. E através do NetBeans indiquei onde o arquivo estava, não deu certo, logo em seguida, coloquei o código no construtor da classe, o programa executou normalmente mas não apareceu nenhuma imagem. Só dá problema quando coloco através do NetBeans, que ele gera o código, se você colocar programaticamente não dá erro, mas a imagem não é exibida.
Então eu resolvi copiar as imagens e colocar direto na pasta/pacote view. Fiz pelo help do NetBeans e deu a mesma exceção, ele não consegue localizar o arquivo.

marcoslogan

Deu pra entender? Ou ficou muito vago?

staroski

Então o caminho vai ser getClass().getResourceAsStream("/view/img/imagem.jpg")

marcoslogan

Verdade. Mas você sabe me dizer o porquê que o NetBeans está fazendo isso? Pois tenho aqui nesse computador o NetBeans 8.2 com o Java 8. Tenho um projeto que utilizo o helper do NetBeans e não dá essa exceção.

staroski

Não sei, não uso NetBeans, nunca me acostumei com o jeito engessado dele e olha que venho testando desde 2002, até cheguei a usar as derivações dele como o Forté for Java e o Sun One Studio.

j-menezes

Mas a partir do Java 9 é modularizado.
Se quer usar o Java 16 e rodar programas do Java 8 é preciso colocar o
–add-modules na chamada.

Isso não é erro nem do Java nem do NetBeans.

Qualquer coisa posta seu codigo aqui.

T

Não é falha do NetBeans.
O arquivo da imagem foi indicado para o jLabel, mas deve ter mudado o local físico do arquivo ou renomeado.

marcoslogan

Estou usando o Java 16, e baixei a versão mais recente do NetBeans, não estou usando o Java 8. Estou querendo usar as versões mais recentes, principalmente do JavaFX.

marcoslogan

Eu não mudei o arquivo, está numa pasta.

j-menezes

Mas o projeto em sí está usando qual JDK ? (Basta entrar em “Propriedades” do Projeto)

E tambem JLabel é do Swing e não do JavaFX

marcoslogan

Estou usando o JDK Versão 16.

marcoslogan

Não pegou. Fica dando NullPointerException. Que absurdo. Pra que vão mudar?

j-menezes

Isola o problema em um programa pequeno e posta aqui , assim da pra dar uma olhada na pratica.

marcoslogan

Vou postar o código aqui.
O código abaixo está num splash form que estou criando.

public SplashFrm() {
    initComponents();
    this.setVisible(true);
    this.setLocationRelativeTo(null);
    ImageIcon icon;
    
    try {
        icon = new ImageIcon(getClass().getResourceAsStream("view/doctor.jpg").readAllBytes());
    } catch (IOException ex) {
        Logger.getLogger(SplashFrm.class.getName()).log(Level.SEVERE, null, ex);
    }
    

    new Thread() {
        @Override
        public void run() {
            for (int i = 0; i < 101; i++) {
                try {
                    sleep(60);
                    jProgressBar1.setValue(i);

                    switch(i){
                        case 0 -> {
                            
                        }
                    }
                    
                } catch (InterruptedException ex) {
                    Logger.getLogger(SplashFrm.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }.start();
}
marcoslogan

Já tentei de todas as formas. Se eu colocar através do Helper do NetBeans dá o mesmo erro. Então coloquei programaticamente e o resultado é o mesmo.

j-menezes

Voce fez o que Eu mesmo pedi, mas se puder facilitar ainda mais, poderei ver na integra.

Então sugiro

Cria um projeto novo no NetBeans, entao faça uma tela e coloca esse JLabel com o icone.

Em seguida posta esse projetinho inteiro do NetBeans zipado.

File >> Export Project >> To Zip

Assim fica mais facil reproduzir e ver o problema e quem sabe resolve-lo.

marcoslogan

Blz.

staroski

View é um pacote?
Põe o / na frente do caminho, para buscar a partir da raíz do classpath.

marcoslogan

Já tentei de tudo e sempre dá erro. Já coloquei na mesma pasta, coloquei em outra pasta e ele não consegue encontrar o arquivo. Meu Deus, o que foi que fizeram?

marcoslogan

Consegui resolver.

marcoslogan

Obrigado a todos que me responderam.

Criado 8 de outubro de 2021
Ultima resposta 4 de nov. de 2021
Respostas 28
Participantes 5