2013-08-17 88 views
0

此代码:为什么我会收到“非静态变量和静态上下文”错误?

package agendaweb; 

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

public class AgendaWeb { 


public class Agenda extends JFrame implements ActionListener{ 

    //Swing 
    private JMenuBar barra; 
    private JMenu menu1; 
    private JMenuItem mi1, mi2, mi3; 
    private JTextField camponuevonombre, camponuevotelefono, campobuscarnombre; 
    private JLabel etiquetanuevonombre, etiquetanuevotelefono, imprimenombre, imprimetelefono, nombreprograma, nombreautor, numeroversion, dibusca; 
    private JButton boton, botonnuevo, botonbusca; 
    //Archivo 
    //File archivo = new ("C://pruebas//exportacion.txt"); 
    Formatter nuevoarchivo; 
    Scanner x; 

    //Metodo constructor 
    public Agenda(){ 
     setLayout(null); 

     nombreprograma = new JLabel ("Agenda Telefónica"); 
     nombreprograma.setBounds(150,30,180,30); 
     add(nombreprograma); 

     nombreautor = new JLabel ("Fulanito Mengano Exposito"); 
     nombreautor.setBounds(150,60,180,30); 
     add(nombreautor); 

     numeroversion = new JLabel ("Version 0.1"); 
     numeroversion.setBounds(150,90,180,30); 
     add(numeroversion); 
    //Menu 

     barra = new JMenuBar(); 
     setJMenuBar(barra); 
     menu1 = new JMenu("Archivo"); 
     barra.add(menu1); 
     mi1 = new JMenuItem("Nuevo"); 
     mi1.addActionListener(this); 
     menu1.add(mi1); 
     mi2 = new JMenuItem("Nuevo"); 
     mi2.addActionListener(this); 
     menu1.add(mi2); 
     mi3 = new JMenuItem("Nuevo"); 
     mi3.addActionListener(this); 
     menu1.add(mi3); 


    } 

    public void actionPerformed(ActionEvent e){ 
     Container f=this.getContentPane(); 
     if(e.getSource()==mi1){ 
      nombreprograma.setVisible(false); 
      nombreautor.setVisible(false); 
      numeroversion.setVisible(false); 

      //Formulario 

      etiquetanuevonombre = new JLabel("Nuevo Nombre"); 
      etiquetanuevonombre.setBounds(0,0,180,30); 
      add(etiquetanuevonombre); 
      etiquetanuevonombre.setVisible(true); 

      camponuevonombre = new JLabel("Nuevo Nombre"); 
      camponuevonombre.setBounds(200,0,180,30); 
      add(camponuevonombre); 
      camponuevonombre.setVisible(true); 

      etiquetanuevotelefono = new JLabel("Nuevo Nombre"); 
      etiquetanuevotelefono.setBounds(0,0,180,30); 
      add(etiquetanuevotelefono); 
      etiquetanuevotelefono.setVisible(true); 

      camponuevotelefono = new JLabel("Nuevo Nombre"); 
      camponuevotelefono.setBounds(200,50,180,30); 
      add(camponuevotelefono); 
      camponuevotelefono.setVisible(true); 

      botonnuevo = new JButton("Crear"); 
      botonnuevo.setBounds(200,100,180,30); 
      add(botonnuevo); 
      botonnuevo.addActionListener(this); 
      botonnuevo.setVisible(true); 

     } 
     if(e.getSource()==mi2){ 


     } 
     if(e.getSource()==mi3){ 
      System.exit(0); 

     } 

     if(e.getSource()==botonnuevo){ 
      try{ 
       Class.forName("com.mysql.jdbc.Driver"); 
       Connection con = DriveManager.getConnection(""); 
       Statement 
       estado.executeUpdate("INSERT INTO agenda VALUES()"); 
      } catch(SQLException ex){ 
       System.out.println("Error de MyQSL"); 

      } 

     } 

    } 
    } 

public static void main(String[] args) { 

    Agenda ventana = new Agenda(); 
    ventana.setBounds(10,20,450,250); 
    ventana.setVisible(true); 
} 

} 

显示这样的错误:在螺纹

异常“主”了java.lang.RuntimeException:不可编译源代码 - 非静态变量这不能从在agendaweb静态上下文中引用.AgendaWeb.main(AgendaWeb.java:125)

为什么会发生这种情况,以及如何解决它?

回答

1

问题是您的Agenda类未声明为静态,而main方法是静态方法。尝试使您的Agenda类保持静态。

+0

问题解决了,谢谢你的提示! – ViceNocillator

0

您错误的原因是因为Agenda是您的AgendaWeb类的属性。在您的主要方法中,您正试图访问Agenda而不创建AgendaWeb的实例,该方法为static。只有static变量可以在没有实例的情况下访问,因此它将引发错误。

我不确定你为什么需要AgendaWeb班,这对我来说不是一个很棒的设计。所以如果不是必需的,那就简单地把它取下来。但是,如果您真的需要这样做,那么您需要将您的Agenda课程标记为static,或者您需要创建AgendaWeb类的实例并将其作为Agenda的一个属性来访问Agenda

+0

谢谢,这是关键。我一直没有忘记在开始时删除AgendaWeb类。现在我已经擦掉了无用的东西,并且改变了名字,这很好。感谢您的回答! – ViceNocillator

+0

@ViceNocillator很高兴帮助:-)如果您发现我的答案有帮助,只需接受它。接受答案通常有助于其他人面临同样的问题。 –

0

您的代码由于几个语法错误而无法编译。除了来自:

“这”指的是当前实例类的,而static类似情境生活main在一流水平,没有实例级别。

static上下文中,不可能使用非静态变量。你应该创建一个你的类的实例并使用它。

+0

问题解决了,谢谢你的提示! – ViceNocillator

相关问题