[RESOLVIDO] ERRO ao setar icone JFrame

Boa tarde pessoal, bom, estou com um erro que aparentemente é um tanto simples, ao tentar setar um ícone para meu JFrame TelaPrincipal, está dando o seguinte erro

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at sun.awt.SunToolkit.getImageFromHash(SunToolkit.java:725)
    at sun.awt.SunToolkit.getImage(SunToolkit.java:759)
    at br.com.energymanagement.telas.TelaPrincipal.setIcon(TelaPrincipal.java:537)
    at br.com.energymanagement.telas.TelaPrincipal.<init>(TelaPrincipal.java:59)
    at br.com.energymanagement.telas.TelaPrincipal$14.run(TelaPrincipal.java:501)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:756)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:709)
    at java.awt.EventQueue$3.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:726)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

no construtor estou chamando o método setIcon()

Private void setIcon()
{
        setIconImage(Toolkit.getDefaultToolkit()
                .getImage(getClass()
                    .getResource("/br/com/energymanagement/icones/Gear.png")));
}

Se o caminho /br/com/energymanagement/icones/Gear.png realmente estiver no classpath de sua aplicação, basta fazer.

setIconImage( ImageIO.read( getClass().getResourceAsStream("/br/com/energymanagement/icones/Gear.png") ) );

Ainda nada, está acontecendo alguma bruxaria no meu código pois não consigo colocar nem uma imagem em um label que da erro, veja o erro que retornou quando fiz do jeito que sugeriu:

C:\Users\david\Documents\NetBeansProjects\EnergyManagement3\src\br\com\energymanagement\telas\TelaPrincipal.java:60: error: unreported exception IOException; must be caught or declared to be thrown
        setIcon();
Note: C:\Users\david\Documents\NetBeansProjects\EnergyManagement3\src\br\com\energymanagement\telas\TelaPrincipal.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
1 error
C:\Users\david\Documents\NetBeansProjects\EnergyManagement3\nbproject\build-impl.xml:952: The following error occurred while executing this line:
C:\Users\david\Documents\NetBeansProjects\EnergyManagement3\nbproject\build-impl.xml:269: Compile failed; see the compiler error output for details.

o método ficou assim:

private void setIcon() throws IOException {
        setIconImage( ImageIO.read( getClass().getResourceAsStream("/br/com/energymanagement/icones/Gear.png") ) );
}

Não sei se foi falha minha ou não, mas ao invés de só Rodar o Projeto eu Depurei e deu certo!

Obrigado pela sugestão galera!

Olá, Existe um método muito mais fácil, tente assim:
setIconImage(new javax.swing.ImageIcon(this.getClass().getResource(endereço)).getImage());

getResource retorna um objeto URL, isso só funciona quando as imagens estão em disco ou na rede, se ele criar um JAR para a plicação, não vai mais conseguir carregar a imagem, por isso recomendei o getResourceAsStream.

Você esqueceu de pôr um try-catch ou um throws.

Estranho…
Não sou um programador muito experiente, mas testei em vários computadores que tenho aqui, todos apareceram o ícone
Por isso dei o exemplo para o amiguinho, mas não depois que fui ler que ele já tinha solucionado : ]
Mesmo assim obrigado!

2 curtidas