Non-static method setConectar()?

Olá pessoal tô com um problema como diz o tópico toda vez q tento compilar fica aparecendo esse erro:

C:\Java\Projeto Final\Principal.java:227: non-static method setConectar() cannot be referenced from a static context
setConectar();
^

segue o código abaixo … já tô ficando de cabelo branco pois já conferir uns 10000 vezes e não vejo onde está o problema…

obrigado pela atenção pessoal.

import java.io.;
import java.util.
;
import java.lang.;
import java.sql.
;
import java.awt.;
import java.awt.event.
;
import javax.swing.*;

public class Principal {

ResultSet rs;

static Connection con=null; // cria o objeto con, para ser utilizado nas manipulacoes do banco de dados
static Statement MeuState; // cria um objeto statement para a pesquisa SQL

private static void createAndShowGUI() {
	
	Color Cor1 = new Color(169,196,222);
	Color Cor2 = new Color(169,196,222);
	Color Cor3 = new Color(140,196,222);
	
	JFrame.setDefaultLookAndFeelDecorated(true);

    JFrame frame = new JFrame("Principal");
    frame.setSize(410,357);
	frame.setUndecorated(true);
	frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    JPanel P1 = new JPanel();
	P1.setPreferredSize(new Dimension(397,327));
	P1.setBackground(Cor2);
    frame.getContentPane().add(P1, BorderLayout.CENTER);


  	JLabel lCodCliente =new JLabel("Cód. Cliente:");
  	lCodCliente.setBounds(10,3,70,30);
	
	JTextField txCodCliente = new JTextField();
	txCodCliente.setBounds(10,25,70,20);		
	
	JLabel lNome =new JLabel("Nome:");
	lNome.setBounds(90,3,40,30);
	
	JTextField txNome = new JTextField();
	txNome.setBounds(90,25, 300,20);

.
.
.
.

	P1.add(Panel_btn);
	P1.add(Panel_btn1);
			
	frame.add(P1);

    frame.pack();
    frame.setVisible(true);
    
    setConectar();
    
}

String url = “jdbc:odbc:dsCadCliente”;

public Connection setConectar(){
try
{
Class.forName( “sun.jdbc.odbc.JdbcOdbcDriver” );
Connection MinhaConexao = DriverManager.getConnection(url);
MeuState = MinhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = MeuState.executeQuery(“SELECT * FROM Clientes”);

   } 
     catch(ClassNotFoundException ex)
   {
     System.out.println("Driver JDBC-ODBC não encontrado!");
   }
     catch(SQLException ex)
   {
     System.out.println("Problemas na conexao com a fonte de dados");
   }  
   
   }

public static void Desconectar(){
try {
MeuState.close();
con.close();
System.out.println(“Desconectado com sucesso”);
} catch (Exception e)
{
e.printStackTrace();
System.out.println(“Erro ao desconectar-se”);
}
}

public static void main(String[] args) {

    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            createAndShowGUI();                
        }
    });
}

Seu método setConectar deve ser estático, ou então você deve criar uma instância da classe que contém ele para poder chamá-lo. Eu prefiro a primeira opção nesse caso.

Ficaria assim:

 public static Connection setConectar()

Olá,

Quando for colocar seu código use a opção Code para nos ajudar a entendê-lo… :wink:

O problema está no método setConectar(), sendo necessário que ele seja static. Para dúvidas de uso quanto a palavra-chave static recomendo:

:arrow: http://www.guj.com.br/posts/list/1076.java

Mudança necessária:

public static Connection setConectar(){ 
try 
{ 
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" ); 
Connection MinhaConexao = DriverManager.getConnection(url); 
MeuState = MinhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
ResultSet.CONCUR_READ_ONLY); 
rs = MeuState.executeQuery("SELECT * FROM Clientes"); 

} 
catch(ClassNotFoundException ex) 
{ 
System.out.println("Driver JDBC-ODBC não encontrado!"); 
} 
catch(SQLException ex) 
{ 
System.out.println("Problemas na conexao com a fonte de dados"); 
} 

} 

Abraço,

:wink:

Pessoal muito obrigado o pro era esse mesmo!.. flw