此代码:
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);
}
}
显示此错误:
线程“main”中的异常java.lang.RuntimeException:无法编译的源代码 - 无法通过agendaweb.AgendaWeb.main(AgendaWeb.java:125)上的静态上下文引用非静态变量
为什么会发生这种情况以及如何解决?
答案 0 :(得分:1)
问题是您的Agenda
类未声明为静态,而main
方法是静态方法。尽量让你的Agenda
类保持静态。
答案 1 :(得分:0)
出错的原因是Agenda
是AgendaWeb
类的属性。在您的main方法中,这是一种static
方法,您尝试访问Agenda而不创建AgendaWeb
的实例。在没有实例的情况下只能访问static
个变量,因此会抛出错误。
我不确定你为什么需要AgendaWeb
课程,这对我来说看起来不是一个很好的设计。如果不需要,请简单地将其取下。但是如果你真的需要它,那么你需要将你的Agenda类标记为static
,或者你需要创建AgendaWeb
类的实例来访问Agenda
作为它的属性。
答案 2 :(得分:0)
由于多个语法错误,您的代码无法编译。除此之外:
“this”指的是类的当前实例,而像static
这样的main
上下文存在于类级别,而不是实例级别。
从static
上下文中,不可能使用非静态变量。您应该创建一个类的实例并使用它。