我的程序的Action Listener不起作用

这又是我,我似乎无法让这些代码工作。 我基本上都在询问有关按钮在点击时什么都不做的任何建议。 你想要我附上源代码吗?

我正在尝试实现的方法:

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); } }); } 

你需要的任何其他东西,让我知道

PasswordDemo如何使用密码字段 ,将是您学习的一个很好的起点,它将成为一个有效的sscce 。

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

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

通过对H2数据库运行PasswordDemo的以下修改:

 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 

通过对Apache Derby运行以下对PasswordDemo修改:

 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); } } ... 

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