我的程序的Action Listener不起作用

我的程序的Action Listener不起作用

问题描述:

这是我又一次,我似乎无法得到此代码的工作。我基本上要求任何建议,为什么按钮什么都不做,当点击。你想让我附上源代码吗?我的程序的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,我真的不知道该学什么,所以任何提示都会受到欢迎。我也是新来的堆栈溢出和发布代码,所以你可以给我的任何东西都将不胜感激。提前致谢。

编辑:我现在添加一个类的事件处理与它内部的线程就像这样;

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

你还需要什么,让我知道

+5

我在您发布的代码块中看不到一点ActionListener代码。为什么在不涉及使用ActionListeners的情况下如此标题?另外,你的问题和你的问题具体是什么?你发布的内容是一个模糊的愿望和一些不相关的代码。我认为如果我们有机会帮助你,我们可能会需要更多。 –

+1

你到底在问什么? – Logan

+0

好的,现在我们看到一些ActionListener代码,所以我们正在某处。我认为在这一点上你需要做一些调试,包括放置'System.out。println(“在代码中的002位置,foo变量是:”+ foo);'程序中的语句,用于检查是否调用了您认为应该调用的方法以及该时间点的变量状态。 –

PasswordDemo,如How to Use Password Fields所示,将是您研究的良好起点,它会生效sscce

附录:在缺乏一个完整的实例或者您所使用的数据库的知识,我得到了以下的结果,

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

通过运行针对H2 Database以下修改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 

通过运行以下修改PasswordDemoApache 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); 
    } 
} ... 
+0

划痕。我不得不取消所有线程,因为经过一些更改后,我得到一个错误,表示(Result Set未打开,请确保autocommit为OFF)。请帮助 –

+0

@凯斯:我已经详细阐述过了。 – trashgod

+0

我不明白你在做什么。我正在为我的数据库使用Apache derby。我可以在下午给你的源代码吗? –

我终于得到它的工作!我有另一个构造函数具有相同的变量名称,我对JTextFields的调用被误认为是对其他构造函数的调用。 foo声明确实有帮助!谢谢大家!

+0

感谢您分享您的结果;我相信我犯了类似的错误。我对你的答案进行投票表决是有用的,你将获得10点声望。当然,接受你自己的答案不会得分;但如果你接受我的回答,你会得到额外的两分。有关更多详细信息,请参见[faq]。 – trashgod

+1

感谢您的信息,并再次感谢您的帮助 –