Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我的程序&x27;s Action Listener赢了';行不通_Java_Database_Swing_Actionlistener - Fatal编程技术网

Java 我的程序&x27;s Action Listener赢了';行不通

Java 我的程序&x27;s Action Listener赢了';行不通,java,database,swing,actionlistener,Java,Database,Swing,Actionlistener,又是我,我似乎无法让代码正常工作。我基本上是在询问为什么点击按钮时什么都不做。要我附上源代码吗 我尝试实现的方法: public static void UserInput() { try { stmt = connect.createStatement(); ResultSet res = stmt.executeQuery("SELECT * FROM " + tableName); while (res.next())

又是我,我似乎无法让代码正常工作。我基本上是在询问为什么点击按钮时什么都不做。要我附上源代码吗

我尝试实现的方法:

   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()。但是,现在当我单击submit按钮时,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);
        }
    });
}
如中所示,如果您还需要什么,请告诉我,这将是您学习的一个很好的起点,也将是一个有效的学习方法

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

Version: H2 1.3.157 (2011-06-25) 1.3
Version: Apache Derby 10.6.2.1 - (999685) 10.6
通过针对以下对象运行以下修改:

附录:我得到了以下结果

Version: H2 1.3.157 (2011-06-25) 1.3
Version: Apache Derby 10.6.2.1 - (999685) 10.6
通过针对以下对象运行以下修改:


我终于成功了!我有另一个具有相同变量名的构造函数,我对JTextFields的调用被误认为是对另一个构造函数的调用。foo的声明真的很有帮助!!!谢谢大家

我在您发布的代码块中没有看到任何ActionListener代码。当它不涉及ActionListeners的使用时,为什么它的标题是这样的?还有,你的问题是什么?你所发布的只是一个模糊的愿望和一些无关的代码。我认为如果我们有机会帮助你,我们可能需要更多。好的,现在我们看到一些ActionListener代码,所以我们正在取得进展。我认为此时您需要进行一些调试,包括放置
System.out.println(“在代码中的002位置,foo变量是:”+foo)语句,以检查是否正在调用您认为应该调用的方法,以及该时间点的变量状态。我在调用者中添加了System.out子句和线程。我使用Thread.start,Thread.wait和Thread.stop。在线程出现之前,System.out没有出现。之后,它成功了,还有一个非法的监视器异常。顺便说一下,我把System.out放在了UserInput中。但是,我知道有一个运行时错误。我输入的每个用户名和密码,即使它在数据库中,都会显示错误消息。我可以试着把源代码发给你,这样你就可以自己看了。你还需要我做什么吗?抓紧它。我不得不删除所有线程,因为在一些更改之后,我得到了一个错误,上面说(结果集未打开。请确保“自动提交”处于关闭状态)。请help@Keith当前位置我已经详细阐述了以上内容。我不明白你在做什么。我正在使用ApacheDerby作为我的数据库。我可以为您提供源代码吗?我已经更新了上面的示例,以显示H2和Derby的可比较查询。现在,您已经有了一个完整的工作示例,您可以确定哪里出了问题。很抱歉,这不是一个免费的调试服务,适用于任何年龄的人。如果你在当地的学校找不到一门课,这是一个很好的开始。感谢你分享你的结果;我肯定我也犯过类似的错误。我认为你的答案很有用,你会因此获得10分的声誉。当然,接受你自己的答案没有意义;但是如果你接受我的回答,你会得到另外两分。有关更多详细信息,请参阅。