Cannot use this in a static context?

4 respostas
J

Olá pessoal… como diz o tópico eu já andei pesquisando + não encontrei uma solução… alguém tem alguma dica pra solucionar esse problema?

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import javax.swing.*;

@SuppressWarnings("serial")
public class Principal extends JFrame implements ActionListener{

    	static Connection con=null;
   	static Statement statement;
    
	static JLabel txCodCliente, txNome, txCPF, txRG,
   	              txDTCad, txLogradouro, txBairro, txCEP, 
   	              txCidade, txUF, txTelefone, txCelular,
   	              txFax;
	static JButton btnProximo;
	  
	private static void createAndShowGUI() {
		
    	Color Cor1 = new Color(169,176,222);
		Color Cor2 = new Color(169,196,222);
		Color Cor3 = new Color(140,196,222);
		
		
	JFrame.setDefaultLookAndFeelDecorated(true);
        JFrame frame = new JFrame("Principal");
	frame.setUndecorated(true);
	frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
        // Cria um JPanel para ajusta o tamanho do Frame 
        JPanel panelCentral = new JPanel();
        panelCentral.setPreferredSize(new Dimension(397,327));
        panelCentral.setBackground(Cor2);
        frame.getContentPane().add(panelCentral, BorderLayout.CENTER);
        panelCentral.setBounds( 2, 2, 400,325);
        panelCentral.setLayout(null);
        
        
        JLabel lCodCliente =new JLabel("Cód. Cliente:");
	lCodCliente.setBounds(10,3,70,30);
	panelCentral.add(lCodCliente);
	  	
	JTextField txCodCliente = new JTextField();
	txCodCliente.setBounds(10,25,70,20);
	panelCentral.add(txCodCliente);
	
	JLabel lNome =new JLabel("Nome:");
	lNome.setBounds(90,3,40,30);
	panelCentral.add(lNome);
		
	JTextField txNome = new JTextField();
	txNome.setBounds(90,25, 300,20);		
	panelCentral.add(txNome);
		
                .
                .
                .
                .
                .
		
	// Botões de navegação
	JButton btnProximo = new JButton(">>");
	btnProximo.setBackground(Cor3);
	btnProximo.setBounds(109,5,50,25);
	btnProximo.setToolTipText("Próximo registro");

	//************************************
	//O problema tá sendo apresentado aqui
	//************************************
	btnProximo.addActionListener(this);


							
	JButton btnUltimo = new JButton(">");
	btnUltimo.setBackground(Cor3);
	btnUltimo.setBounds(161,5,50,25);
	btnUltimo.setToolTipText("Último registro");
			
		
	// Painel dos botões de navegação		  
	JPanel panelBtnNavegacao =new JPanel();
	panelBtnNavegacao.setBackground(Cor2);  
                    panelBtnNavegacao.setBorder(BorderFactory.createLoweredBevelBorder());
		panelBtnNavegacao.setBounds(93,205,216,35);
		panelBtnNavegacao.setLayout(null);
		//Add botões de Navegação ao Painel
		panelBtnNavegacao.add(btnPrimeiro);
		panelBtnNavegacao.add(btnAnterior);
		panelBtnNavegacao.add(btnProximo);
		panelBtnNavegacao.add(btnUltimo);
               
                .
                .
                .
                .
                .
	
		
		panelCentral.add(panelBtnNavegacao);
        
		frame.pack();
        	frame.setResizable(false);
        	frame.setLocationRelativeTo(null); //centraliza a janela
        	frame.setVisible(true);
        	frame.add(panelCentral);
           
        
	        setConectar();
        
	}
	
 
	public static void main(String args[]) {
	
		javax.swing.SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				createAndShowGUI();			
            }
        });
		
	}
	
	
	   public void actionPerformed(ActionEvent evt){
	    	
	    	Object source = evt.getSource(); //captura o tipo do botão
	   	 		    	

	       	if(source==btnProximo){
	       		mostraproximo(1);
	       	}
	       	 
	    }
	   
	   
 	public static Connection setConectar(){
		try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//informa o tipo do banco de dados
			// realiza a conexao com o banco
			con = DriverManager.getConnection("jdbc:odbc:Driver=" + "{Microsoft Access Driver (*.mdb)};" + "DBQ=C:\Documents and Settings\Iran\workspace\PROJETOSIC\DBCadCliente.mdb","admin","");			
			System.out.println("Conexao Efetuada com sucesso!");
			//*******************************************
			statement = con.createStatement();//abre  a pesquisa com SQL
			//*******************************************
			
			return con;			
		} catch (Exception e) {
			System.out.println("Nao foi possivel efetuar a conexao!");
			e.printStackTrace();
			return con;
		}
		
		
	}
 	
	public static void Desconectar(){		
		
		try {
			statement.close();
			con.close();		
			System.out.println("Desconectado com sucesso");
		} catch (Exception e) {
			e.printStackTrace();					
			System.out.println("Erro ao desconectar-se");
		}
		
	}
	
	public void mostraproximo(int n){
	   	try {
	   		ResultSet rs;  //Sempre que for trabalhar com pesquisar
        	if (n==1) rs = statement.executeQuery("SELECT * FROM Clientes WHERE CodCliente = "+txCodCliente.getText()+"+1");
        	else rs = statement.executeQuery("SELECT * FROM Clientes WHERE CodCliente = "+txCodCliente.getText()+"-1");
        	// se não existe proximo registo
        	if(!rs.next()) JOptionPane.showMessageDialog(null, "Registro inexistente!");
        	else{
        		txCodCliente.setText(rs.getString("CodCliente"));
        		txNome.setText(rs.getString("Nome")); // seta o valor do campo nome na caixa de texto
        		txLogradouro.setText(rs.getString("Logradouro"));
        		txBairro.setText(rs.getString("Bairro"));
        		txCidade.setText(rs.getString("Cidade"));
        		txUF.setText(rs.getString("UF"));
        		}
        	}
		catch (SQLException e) { System.out.println("Problemas na conexao com a fonte de dados"); }
		}


}

tá dando esse erro:
Exception in thread “AWT-EventQueue-0” java.lang.Error: Unresolved compilation problem:
Cannot use this in a static context

4 Respostas

Rodrigo_Carvalho_Aul

Não tem solução. O this representa a instancia do objeto. E variáveis, blocos e métodos estáticos são justamentes independentes da instância do objeto. Então vc não pode dentro de alguma coisa estática referenciar a instância do objeto.

Uma boa maneira de resolver isso é usar tanto método estático desnecessariamente.

[] 's

Rodrigo C. A.

J

blz… então qual seria a melhor solução?

T

Experimente tirar todos os “static” dessa classe, e ponha apenas onde é absolutamente necessário.

J

É tb não funcionou de onde eu tirar aparecia a mensagem: “Cannot make a static reference to the non-static field…”

Criado 5 de julho de 2006
Ultima resposta 5 de jul. de 2006
Respostas 4
Participantes 3