用户在swing中成功登录时打开新窗口

时间:2014-09-07 06:01:08

标签: java swing

我正在开发一个基于Swing的小项目。在这个项目中,我想在用户成功登录时打开另一个窗口但是当我单击log-in按钮时发生异常,如"Illegal attempt to exit early",而我的数据库连接很好,因为当我显示消息对话框时它显示成功登录。这是我的代码。

package org.Core.Art;

import java.awt.Component;
import org.netbeans.api.settings.ConvertAsProperties;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
import org.openide.windows.TopComponent;
import org.openide.util.NbBundle.Messages;
import java.sql.*;
import javax.swing.*;
import org.openide.util.Exceptions;

public final class CoreTopComponent extends TopComponent { 

    private String password;
    private String pwd;
    private Component jPasswordField1;
    private Component jButton1;
    //private Object text_password;

    public CoreTopComponent() {
        initComponents();
    } 

    private void ClickActionPerformed(java.awt.event.ActionEvent evt) {                
        // TODO add your handling code here:
        Object  password = text_password.getText();       

        String query = "Select * from assistant where pass = '"+password+"'";

        try {
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/auto_lube","root", "mehar");    
            Statement stmt = conn.createStatement();
            stmt.execute(query);    
            ResultSet rs = stmt.getResultSet();
            boolean recordfound = rs.next();

            if (recordfound) {
                Login regFace = new Login();
                regFace.setVisible(true);
                dispose(); 
                //JOptionPane.showMessageDialog(null,"You are login successfully");
            } else {
                JOptionPane.showMessageDialog(null,"Try again");
                // new Login_fram().setVisible(true);
            }

        conn.close();

        } catch(java.lang.ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null,"Exception Occured"+ex.getMessage());
        } catch(Exception ex) {
            JOptionPane.showMessageDialog(null,"Exception Occured"+ex.getMessage());    
        }
    }

    private void text_passwordActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
        Object  password = text_password;
    }

    public static void main(String args[]) {
        CoreTopComponent core = new CoreTopComponent();
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new CoreTopComponent().setVisible(true);
            }
        });
     }
}

我的其他课程为Login.java,如果找到记录,则用户点击log_in按钮,然后打开新窗口或Login.java

1 个答案:

答案 0 :(得分:1)

在这些方面:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/auto_lube","root", "mehar")

请注意,您尝试使用MySQL连接到JdbcOdbcDriver数据库,这是不正确的,但可能是异常的原因。您应该使用MysQL Connector代替。除了JDBC-ODBC之外,JDK8也不推荐使用它。见Removal of JDBC ODBC bridge in java 8

您可以在this answer中遵循一些其他JDBC提示。简而言之:


题外话

请注意,您的代码中存在一些概念错误。例如,这个SQL查询(注意使用预准备语句的正确方法):

String query = "SELECT * FROM assistant WHERE pass = ?";

此查询将返回密码等于某个参数的所有记录,因此如果两个或更多人拥有相同的密码,则将返回多个记录。不太可能,是的,但可能。登录系统基于用户名和密码,因此您应查询用户名,然后检查密码是否有效。更不用说密码不应该以纯文本形式存储,而是至少加密(如果经过散列则更好)。

另一方面,根据您的代码,很难判断您是使用Swing标准组件还是基于Swing的其他API。我的意思是,org.openide.*是什么? Swing组件的导入在哪里?

最后,如果你仍然遇到问题,pelase会发布异常的堆栈跟踪。