在用户验证中按“登录”按钮后,我的代码不显示任何内容

时间:2013-12-24 10:31:00

标签: java swing user-interface awt

下面是我的登录用户界面代码。我正在尝试创建用户验证。我已经完成了我应该做的所有事情,但是在控制台中按下“登录”按钮后,我的代码没有显示任何内容。这段代码出了什么问题?

import javax.swing.*;                              // For Frame
import java.awt.event.*;                           // For action Listener
import java.sql.*;                                // For Database

public class Login {
    /*    Three instance varaibles     */

    Connection con;
    Statement st;
    ResultSet rs;
    JFrame f = new JFrame("User Login");
    JLabel l = new JLabel("Username:");
    JLabel l1 = new JLabel("Password:");
    JTextField t = new JTextField(10);
    JTextField t1 = new JTextField(10);
    JButton b = new JButton("Login");

    /*     CONSTRUCTOR                 */
    public Login() {
        /*    METHODS                */
        connect();
        frame();
    }

    public void connect() {
        try {
            /*         DECLARING DRIVER                             */
            String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
            Class.forName(driver);
            String db = "jdbc:odbc:Database1";
            /*  THIS WILL GET A CONNECTION TO OUR DATABASE  */
            con = DriverManager.getConnection(db);
            st = con.createStatement();
        } catch (Exception ex) {
        }
    }

    public void frame() {
        f.setSize(600, 400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
        JPanel p = new JPanel();
        p.add(l);
        p.add(t);
        p.add(l1);
        p.add(t1);
        p.add(b);
        f.add(p);
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                try {
                    String user = t.getText().trim();
                    String pass = t1.getText().trim();
                    String sql = "select user,pass from Table2 where user='"
                            + user + "'and pass='" + pass + "'";
                    rs = st.executeQuery(sql);
                    int count = 0;
                    while (rs.next()) {
                        count = count + 1;
                    }
                    if (count == 1) {
                        JOptionPane.showMessageDialog(null,
                                "User found, Access granted! ");
                    } else if (count > 1) {
                        JOptionPane.showMessageDialog(null,
                                "Duplicate user, Access denied! ");
                    } else {
                        JOptionPane.showMessageDialog(null,
                                "User not found! ");
                    }
                } catch (Exception ex) {
                }
            }
        });
    }

    public static void main(String[] args) {
        new Login();
    }
}

3 个答案:

答案 0 :(得分:1)

  1. System.out.println("Driver Loaded")之后放置Class.forName()以查看驱动程序是否已加载
  2. 在连接代码后面添加System.out.printlnt("Connected to Database")以查看其是否已连接
  3. ex.printStackTrace()放入所有空的catch块中,以便查看错误发生的位置。
  4. 我在测试时忘了添加MySql jar,所以我得到了ClassNotFoundException。确保在项目中包含jar。添加jar之后,代码就可以了。我确实将数据库切换到了MySql,因为那是我使用的那个
  5. 添加到数字3.如果您得到ClassNotFoundExceptio,则可能需要将驱动程序jar添加到库中。如果您得到SQLException连接语法或查询语法有问题。除此之外,我不会在其他任何地方发生异常,因为我自己运行它。

答案 1 :(得分:1)

有三件事情浮现在脑海中。第一个已经突出显示的是不要盲目地消费异常

try
{
    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    Class.forName(driver);

    String db = "jdbc:odbc:Database1";
    con = DriverManager.getConnection(db);
    st = con.createStatement();
}
catch(Exception ex)
{
    // This is a bad idea...
}

你应该避免捕捉“所有”异常,而是专注于那些已知被抛出的异常。

至少,您应该以某种方式记录异常和/或重新抛出或引发新异常,以便调用者知道出现了问题

其次,在您添加任何内容之前,您正在使窗口可见...

f.setSize(600, 400);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);

JPanel p = new JPanel();
p.add(l);
p.add(t);
p.add(l1);
p.add(t1);
p.add(b);
//...

相反,您应该准备用户界面,然后让它可见......

f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

JPanel p = new JPanel();
p.add(l);
p.add(t);
p.add(l1);
p.add(t1);
p.add(b);
//...
f.pack();
f.setVisible(true);

第三,你没有在事件调度线程的上下文中启动你的UI,从长远来看可能会导致各种各样的怪异......

EventQueue.invokeLater(new Runnable() {
    public void run() {
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        JPanel p = new JPanel();
        p.add(l);
        p.add(t);
        p.add(l1);
        p.add(t1);
        p.add(b);
        //...
        f.pack();
        f.setVisible(true);
    }
}

有关详细信息,请参阅Initial Threads

答案 2 :(得分:0)

您的代码似乎在执行期间抛出异常。可以与您的数据库相关的代码。您正在代码中输入catch块,并且没有任何操作。打印堆栈跟踪以检查错误。

 catch (Exception ex) {
     ex.printStackTrace (); 
 }

在两个例外块中添加以下行,显示消息“错误!”在面板上,这意味着您的面板相关代码工作正常。

JOptionPane.showMessageDialog (null, "error! ");