Então, eu criei um projeto muito simples, no qual quero inserir uma imagem em um jLabel, porém apresenta-me a seguinte mensagem de erro: uma variável não-estática não pode ser referenciada em um contexto estático. Como posso corrigir este erro?
publicclassIndicadorDiario{ImageIconimagem=newImageIcon(getClass().getResource("/Arquivo.png"));/** * @param args the command line arguments */publicstaticvoidmain(String[]args)throwsException{Indicadorindicador=newIndicador();indicador.setVisible(true);indicador.jLabelPrimeiroLugarParabensLED.setIcon(imagem);//erro apresentado nesta linha}}
O problema não é a imagem em si, mas o fato de você estar usando uma variável membro dentro de uma função estática. No seu caso, você pode resolver o seu problema simplesmente assim:
publicclassIndicadorDiario{/** * @param args the command line arguments */publicstaticvoidmain(String[]args)throwsException{Indicadorindicador=newIndicador();indicador.setVisible(true);ImageIconimagem=newImageIcon(getClass().getResource("/Arquivo.png"));indicadorVendasDiario.jLabelPrimeiroLugarParabensLED.setIcon(imagem);}}
vanessa.tenorio
entanglement:
O problema não é a imagem em si, mas o fato de você estar usando uma variável membro dentro de uma função estática. No seu caso, você pode resolver o seu problema simplesmente assim:
publicclassIndicadorDiario{/** * @param args the command line arguments */publicstaticvoidmain(String[]args)throwsException{Indicadorindicador=newIndicador();indicador.setVisible(true);ImageIconimagem=newImageIcon(getClass().getResource("/Arquivo.png"));indicador.jLabelPrimeiroLugarParabensLED.setIcon(imagem);}}
Muito Obrigada, entanglement... porém agora o erro passou para esta linha abaixo, afirmando que o método getClass() não pode ser referenciada em um contexto estático.
ImageIcon imagem = new ImageIcon(getClass().getResource("/Arquivo.png"));
Mesmo assim, muito obrigada!!!
E
entanglement
Ah, desculpe. Nesse caso, você vai ter de trocar “getClass()” por “IndicadorDiario.class”.
De modo geral, é esse o preço que você paga por escrever muita coisa dentro do “main” - tipicamente, o “main” de uma classe X deveria apenas instanciar um objeto da classe X, e chamar um método, passando (quem sabe) alguns parâmetros.
Eu normalmente faria algo como:
publicclassIndicadorDiario{/** OK, "processar" não é o melhor nome para um método, por favor escolha um nome melhor */publicvoidprocessar()throwsException{Indicadorindicador=newIndicador();indicador.setVisible(true);ImageIconimagem=newImageIcon(getClass().getResource("/Arquivo.png"));indicador.jLabelPrimeiroLugarParabensLED.setIcon(imagem);}/** * @param args the command line arguments */publicstaticvoidmain(String[]args)throwsException{IndicadorDiarioid=newIndicadorDiario();id.processar();}}
vanessa.tenorio
entanglement:
Ah, desculpe. Nesse caso, você vai ter de trocar "getClass()" por "IndicadorDiario.class".
De modo geral, é esse o preço que você paga por escrever muita coisa dentro do "main" - tipicamente, o "main" de uma classe X deveria apenas instanciar um objeto da classe X, e chamar um método, passando (quem sabe) alguns parâmetros.
Eu normalmente faria algo como:
publicclassIndicadorDiario{/** OK, "processar" não é o melhor nome para um método, por favor escolha um nome melhor */publicvoidprocessar()throwsException{Indicadorindicador=newIndicador();indicador.setVisible(true);ImageIconimagem=newImageIcon(getClass().getResource("/Arquivo.png"));indicador.jLabelPrimeiroLugarParabensLED.setIcon(imagem);}/** * @param args the command line arguments */publicstaticvoidmain(String[]args)throwsException{IndicadorDiarioid=newIndicadorDiario();id.processar();}}
Bom dia! entanglement, utilizando sua preciosa ajuda, resolvi meu problema do seguinte modo:
dentro da classe Indicador, eu criei o método processar: