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 中的异常:无法编译的源代码 - 非静态变量,不能从位于议程 web.AgendaWeb.main(AgendaWeb.java:125) 的静态上下文中引用

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

4

3 回答 3

1

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

于 2013-08-17T14:41:26.170 回答
0

你的错误的原因是因为Agenda是你的AgendaWeb班级的一个属性。在您的主要方法中,这是static您尝试访问议程而不创建AgendaWeb. 只有static变量可以在没有实例的情况下访问,因此它会引发错误。

我不确定你为什么需要AgendaWeb上课,这对我来说看起来不是一个很棒的设计。因此,如果不需要,只需将其取下即可。但是如果你真的需要它,那么你需要将你的议程类标记为static或者你需要创建AgendaWeb类的实例来访问Agenda它的属性。

于 2013-08-17T14:44:52.547 回答
0

由于几个语法错误,您的代码无法编译。除此之外:

“this”指的是一个类的当前实例static,而像这样的上下文main存在于类级别,而不是实例级别。

static上下文内部不可能使用非静态变量。您应该创建一个类的实例并使用该实例。

于 2013-08-17T14:49:15.637 回答