Não estou conseguindo carregar imagens no JLabel

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.

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

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

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?

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

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.

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

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:

1 curtida

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.

Deu pra entender? Ou ficou muito vago?

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

1 curtida

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.

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.

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.

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.

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.

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

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

Estou usando o JDK Versão 16.

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