簡體   English   中英

從actionPerformed調用靜態方法時出錯,但從靜態void main調用時沒有錯誤

[英]error when calling a static method from actionPerformed but no error if called from static void main

這是嘗試為數據庫開發CRUD的程序的開始,我為該連接創建了一個靜態方法,以及另外兩個我可以調用的靜態方法,它們可以從主體中調用,但是如果嘗試從中調用它們actionPerformed它為我提供了一個Exception錯誤,其中提供了完整的代碼。

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

public class DBgui extends WindowAdapter implements ActionListener{
Frame f_principal, f_vertabla, f_modificar, f_mostrartablas, f_creartabla, f_borrar;//contenedor
Button b_aceptar, b_cancelar;//componentes
Label label_nombre, label_atributo;
TextField tf_nombre, tf_atributo;
MenuBar mb; //barra para menus
Menu m_mostrar, m_crear, m_vertabla, m_modificar, m_borrar;
MenuItem mi_tablas, mi_tabla, mi_mostrardbs, mi_creardbs;

public DBgui() {
    //MARCOS
    f_principal=new Frame("Interfaz gráfica Base de datos");
    f_creartabla=new Frame("Crear Tabla");
    f_vertabla=new Frame("Ver Tabla");
    f_modificar=new Frame("Modificar Registro");
    f_borrar=new Frame("Borrar Registro");

    //BOTONES
    b_aceptar=new Button("Aceptar");
    b_cancelar=new Button("Cancelar");

    //ETIQUETAS
    label_nombre=new Label("Nombre");
    label_atributo=new Label("Atributos");

    //CAMPO DE TEXTO
    tf_nombre=new TextField();
    tf_atributo=new TextField();


    //MENU
    mb=new MenuBar();
    m_mostrar=new Menu("Mostrar");
    m_crear=new Menu("Crear");
    m_vertabla=new Menu("Ver Tabla");
    m_modificar=new Menu("Modificar");
    m_borrar=new Menu("Borrar");

    mi_tablas=new MenuItem("Mostrar Tablas");
    mi_tabla=new MenuItem("Crear Tabla");
    mi_creardbs=new MenuItem("Crear Base de datos");
    mi_mostrardbs=new MenuItem("Mostrar base de datos");
}


//Mostar el menu principal y construccion de orejas 
public void mostrarMarco(){
    f_principal.setSize(800,600);

    //SE CONSTRUYE EL MENU
    f_principal.setMenuBar(mb);
    mb.add(m_mostrar);
    mb.add(m_crear);
    mb.add(m_vertabla);
    mb.add(m_modificar);
    mb.add(m_borrar);

    m_mostrar.add(mi_mostrardbs);
    m_mostrar.add(mi_tablas);
    m_crear.add(mi_creardbs);
    m_crear.add(mi_tabla);
    f_principal.setVisible(true);

//OREJAS
    mi_mostrardbs.addActionListener(this);
    mi_tablas.addActionListener(this);
    mi_tabla.addActionListener(this);
    mi_creardbs.addActionListener(this);
    m_vertabla.addActionListener(this);
    m_modificar.addActionListener(this);
    m_borrar.addActionListener(this);
}

//cuando se presiona un boton del menu se ejecuta 
public void actionPerformed(ActionEvent ae){
    if(ae.getActionCommand().equals("Mostrar base de datos")){
        Connection db1;
        db1=database("root","chino130284");
        mostrarTablas(db1);//THIS WHERE THE PROBLEM IS, IF I CALL THE METHOD FROM HERE GIVES ME AN ERROR
    }
}

public static void mostrarBaseDeDatos(Connection db) throws Exception{
    Frame f_mostrarbasededatos;
    f_mostrarbasededatos = new Frame("Mostar bases de datos");
    f_mostrarbasededatos.setLayout(new FlowLayout());
    f_mostrarbasededatos.setBounds(0,40,120,500);
    f_mostrarbasededatos.setResizable(false);
    Label etiquetamostarbasededatos;
    Statement stmt=db.createStatement();
    ResultSet sst_ResultSet = stmt.executeQuery("SHOW DATABASES");
    while (sst_ResultSet.next()) {
      System.out.println(sst_ResultSet.getString(1));
      etiquetamostarbasededatos = new Label(sst_ResultSet.getString(1));
      f_mostrarbasededatos.add(etiquetamostarbasededatos);
    }
    f_mostrarbasededatos.setVisible(true);
}

public static Connection database(String username, String password) {

Connection conn;
conn=null;
String url = "jdbc:mysql://localhost:3306/testdb";

//LOAD DRIVER
try {
    Class.forName("com.mysql.jdbc.Driver");
} 
catch (ClassNotFoundException e){
    System.err.println("Could not load database driver!");
}
//CONNECT TO DATABASE
try {
    conn = DriverManager.getConnection(url, username, password);
    return conn;
} catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}
return null;            
}

public static void mostrarTablas(Connection db) throws Exception{
    Statement stmt=db.createStatement();
    String sqlshowtables = "SHOW TABLES";
    ResultSet sst_ResultSet = stmt.executeQuery(sqlshowtables);
    while (sst_ResultSet.next()) {
      System.out.println(sst_ResultSet.getString(1));
    }
}

public static void main(String[] args) throws Exception{
    Connection db;
    db=database("root","chino130284");
    mostrarTablas(db);
    mostrarBaseDeDatos(db);
    DBgui gui=new DBgui();
    gui.mostrarMarco();
    db.close();

}

mostrarTablas聲明拋出java.lang.Exception 用捕獲Exceptiontry塊環繞它。

您可以從main調用它,因為它具有:“ throws Exception ”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM