“Método não estático não pode ser referenciado a partir de um erro java de contexto estático”.
Mesmo eu lendo alguns artigos na internet sobre este tópico, não consegui entender o que siguinifica metodo não static e como aplica-lo, por isso venho pedir a ajuda de vcs.
Tenho uma aplicação na qual tenho uma Barra de Menu, quando seleciono um sub menu e vou para uma determinada página, coloco a Barra de Menu desabilitada os seus itens, para que o usuario não selecione outro sub menu sem antes fechar o que abriu e não ficar uma tela em cima da outra, isto esta funcionando bem, mas ao sair da tela que selecionei e voltar para a Barra de Menu e ao habilita-la novamente, estou tendo esse erro, poderiam me ajudar a corrigir ? Obrigado.
Quando saio da página FrmVisNota, clicando no botão “SAIR” faço este código
private void BtnsairActionPerformed(java.awt.event.ActionEvent evt) {
// Botão sair e voltar para o Menu Principal
FrmMenu.jMenu2.setEnabled(true);
FrmMenu.jMenu3.setEnabled(true);
FrmMenu.jMenu4.setEnabled(true);
this.dispose();
}
É ai que aparece o erro de " Método não estático não pode ser referenciado "
Sei que não posso referenciar um código da página que estou, como posso fazer isso entao ? Teria que colocar o FrmMenu como static ou o JMenu2,3,4 ??? Como faço isso ?
O que acontece é que você tem algum método que pertence ao objeto (não estático) e está tentando invocar o mesmo de um método que pertence à classe (estático).
Algo como
public class Foo {
public void boo(){}
public static void main(String args[]) {
boo(); //método estático não pode ser referenciado...
}
}
Você precisa:
a) transformar o método em static
public static boo(){}
b) instanciar um objeto do tipo da classe referenciada e invocar o método a partir desse objeto
public static void main(String args[]) {
Foo foo = new Foo();
foo.boo(); //roda normal
Darlan, muito obrigado pela ajuda, mas não consegui fazer na pratica, deu ruim, entendi a teoria, mas não sei fazer funcionar.
Sera que se eu mandar uma parte do codigo da pagina FrmMenu (menu Principal) e da página que seleciono no menu, FrmVisNota (visualizar Notas) vc pode me mostrar melhor como eu consigo da página FrmVisNota ao clicar no botão Sair, habilitar a barra de Menu da página FrmMenu ? bom vou tentar, ae vai …
TELA MENU FrmMenu
package Formularios;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import javax.swing.Timer;
public class FrmMenu extends javax.swing.JFrame {
public FrmMenu() {
initComponents();
}
private void jMenu3MouseClicked(java.awt.event.MouseEvent evt) {
// Botão sair
dispose();
}
private void formWindowOpened(java.awt.event.WindowEvent evt) {
// Fui na tela Menu, botão direito em evento/windows/windows opened
//Data :
Date datasistema=new Date();
SimpleDateFormat formato = new SimpleDateFormat ("dd/MM/yyyy");
LblData.setText(formato.format(datasistema));
//Hora
Timer timer = new Timer(1000, new hora());
timer.start();
}
private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
// Botão visualizar notas no teclado
FrmVisNotas Visnotas = new FrmVisNotas();
jMenu2.setEnabled(false);
jMenu3.setEnabled(false);
jMenu4.setEnabled(false);
//jMenuItem6.setEnabled(false);
Visnotas.setVisible(true);
jDesktopPane1.add(Visnotas);
}
continua .......
TELA VISUALIZAR NOTAS - FrmVisnotas
package Formularios;
import java.awt.Image;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.table.DefaultTableModel;
public class FrmVisNotas extends javax.swing.JInternalFrame {
final String caminho = "C://MUSIC PLAY//NotasTeclado//";
FileInputStream entrada;
FileOutputStream saida;
File arquivo;
JFileChooser seleccionado = new JFileChooser();
File arq;
byte[] bytesImg;
public FrmVisNotas() {
initComponents();
try (Stream<Path> walk = Files.walk(Paths.get(caminho))) {
List<String> result = walk.filter(Files::isRegularFile)
.map(x -> x.getFileName().toString()).collect(Collectors.toList());
Object[][] dados = new Object[result.size()][1];
for (int i = 0; i < result.size(); i++) {
dados[i] = new Object[]{result.get(i).split("\\.")[0]};
}
DefaultTableModel table = new DefaultTableModel(dados, new String[]{"Notas"});
tblnotas.setModel(table);
} catch (IOException e) {
System.out.printf("Erro: %s", e.getMessage());
}
}
public String GuardarATexto(File arquivo, String contenido) {
String resposta = null;
try {
saida = new FileOutputStream(arquivo);
byte[] bytesTxt = contenido.getBytes();
saida.write(bytesTxt);
resposta = "Arquivo gravado !";
} catch (Exception e) {
}
return resposta;
}
private void BtnsairActionPerformed(java.awt.event.ActionEvent evt) {
// "Botão sair dapágina visualizar nota e ir para página Menu"
//FrmMenu.jMenu2.setEnabled(true); Aqui é onde esta dando o erro !
//jMenu3.setEnabled(true);
//jMenu4.setEnabled(true);
this.dispose();
}
private void tblnotasMouseClicked(java.awt.event.MouseEvent evt) {
// Cliquei na tabela
int linha = tblnotas.getSelectedRow();
txtpnota.setText(tblnotas.getValueAt(linha, 0).toString());
ImageIcon imageIcon = new ImageIcon(new ImageIcon("C://MUSIC PLAY//NotasTeclado//"+txtpnota.getText()+ ".jpg").getImage().getScaledInstance(599,243,Image.SCALE_DEFAULT));
lblfoto.setIcon(imageIcon);
}
continua ...
Darlan. bom da. no codigo que mandei para vc FrmVisNota, eu coloquei o local onde esta dando o erro, abaixo colocarei este código e uma obs, se vc precisar do codigo mais completo, favor verificar mensagem anterior.
private void BtnsairActionPerformed(java.awt.event.ActionEvent evt) {
// “Botão sair da página visualizar nota e ir para página Menu” //FrmMenu.jMenu2.setEnabled(true); OBS : LINHA ONDE ACONTECE O ERRO ! //jMenu3.setEnabled(true); //jMenu4.setEnabled(true);
this.dispose();
Muito obrigado pela sua atenção e ajuda, fique com Deus.