我的程序的Action Listener不起作用

时间:2011-07-13 03:25:20

标签: java database swing actionlistener

这又是我,我似乎无法让这段代码发挥作用。我基本上都在询问关于为什么按钮在点击时什么都不做的任何建议。您是否希望我附上源代码?

我正在尝试实施的方法:

   public static void UserInput() {
      try {
         stmt = connect.createStatement();
         ResultSet res = stmt.executeQuery("SELECT * FROM " + tableName);
         while (res.next()) {
            if (res.getString("Username").equals(usernameField.getText())) {
               if (res.getString("Password").equals(passwordField.getPassword())) {
                  JOptionPane.showMessageDialog(null, "Correct", "Correct",
                           JOptionPane.INFORMATION_MESSAGE);
               } else {
                  JOptionPane.showMessageDialog(null, "Error. Incorrect "
                           + "username or password.", "Error",
                           JOptionPane.ERROR_MESSAGE);
               }
            } else {
               JOptionPane.showMessageDialog(null, "Error. Incorrect "
                        + "username or password.", "Error",
                        JOptionPane.ERROR_MESSAGE);
            }
         }
         res.close();
         stmt.close();
         connect.close();

      } catch (SQLException sqlExcept) {
         sqlExcept.printStackTrace();
      }

   }

以下是我的称呼方式:

             if(firstTime == false) {
              JavaDB jdb = new JavaDB();
         }

        JavaDB window = new JavaDB("");
        window.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent e){
                    System.exit(0);
                }
            });
        }

这是actionListner:

            submit = new JButton("Submit");
            c.add(submit);
              submit.addActionListener( new ActionListener() {  
                    public void actionPerformed( ActionEvent e ) { 
                      if(e.getSource().equals(submit)) {
                         UserInput();
            }
         }  
     });  ;        

如果您需要,请告诉我。我一直在教自己Java,我真的不知道该学什么,所以任何提示都会受到欢迎。我也是新的堆栈溢出和发布代码所以你可以给我的任何东西将不仅仅是赞赏。提前谢谢。

编辑:我现在添加了一个用于事件处理的类,其中的Thread就像这样;

             public class ButtonHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
        if(e.getSource().equals(submit)){
            Thread th = new Thread(new JavaDB());
            th.start();
            th.run();
            try {
                th.wait();
            } catch (InterruptedException e1) {
            }
        }
        else{
        System.exit(0);
        }   
    }

我将UserInput更改为run()。但是,现在当我单击提交按钮时,GUI将消失。仅供您参考,这是我的主要方法:

             public static void main(String args[]) throws SQLException,
        InterruptedException {
    createConnection();
    boolean firstTime = firstTime();
    if (firstTime) {
        JavaDB db = new JavaDB("");
        db.createAccount();
        try {
            connect = DriverManager
                    .getConnection("jdbc:derby:\\KeithDB;shutdown=true");
        } catch (SQLException XJ015) {
        }
    }
    if (firstTime == false) {
        JavaDB jdb = new JavaDB();
        Thread th = new Thread();
    }

    JavaDB window = new JavaDB("");
    window.addWindowListener(new WindowAdapter() {
        public void windowClosing(WindowEvent e) {
            System.exit(0);
        }
    });
}

您需要的任何其他内容,请告诉我

2 个答案:

答案 0 :(得分:1)

PasswordDemo所示,

How to Use Password Fields对您的学习来说是一个很好的起点,它会有效sscce

附录:如果没有完整的示例或您正在使用的数据库的知识,我得到以下结果,

Version: H2 1.3.157 (2011-06-25) 1.3

PasswordDemo执行以下修改H2 Database

if (isPasswordCorrect(input)) {
    try {
        Connection conn = DriverManager.getConnection(
            "jdbc:h2:mem:", "sa", "secret");
        DatabaseMetaData metaData = conn.getMetaData();
        System.out.println("Version:"
            + " " + metaData.getDatabaseProductName()
            + " " + metaData.getDatabaseProductVersion()
            + " " + metaData.getDatabaseMajorVersion()
            + "." + metaData.getDatabaseMinorVersion());
    } catch (SQLException ex) {
        ex.printStackTrace(System.err);
    }
} ...

附录:我得到了以下结果,

Version: Apache Derby 10.6.2.1 - (999685) 10.6

PasswordDemo执行以下修改Apache Derby

if (isPasswordCorrect(input)) {
    try {
        EmbeddedDataSource ds = new EmbeddedDataSource();
        ds.setDatabaseName("/home/trashgod/.netbeans-derby/dbtest");
        Connection conn = ds.getConnection("sa", "secret");
        DatabaseMetaData metaData = conn.getMetaData();
        System.out.println("Version:"
            + " " + metaData.getDatabaseProductName()
            + " " + metaData.getDatabaseProductVersion()
            + " " + metaData.getDatabaseMajorVersion()
            + "." + metaData.getDatabaseMinorVersion());
    } catch (SQLException ex) {
        ex.printStackTrace(System.err);
    }
} ...

答案 1 :(得分:1)

我终于开始工作了!我有另一个具有相同变量名的构造函数,我对JTextFields的调用被误认为是对其他构造函数的调用。 foo语句确实有帮助!谢谢大家!