最简单的调试方法:在每个分支都放个输出语句来检验程序的逻辑,
这里可能有这样的错误:对于对象的相等判断,请使用EQUALS(OBJECT)方法,
使用等号是比较两个对象的引用,如果这两个对象是指向同一个对象的,才会相等,
所以,nameField.getText() == "maple" && pwdField.getText()== "530520",这
一句大概永远也不能返回TRUE,
你应该这样判断:
"maple".equals(nameField.getText()) && "530520".equals(pwdField.getText()),显然,如果你点击OK,那么source == cancelButton会返回FALSE,那么当然什么反应
也没有。

解决方案 »

  1.   

    mainFrame.show();会使当前Frame变成独占的
    如果你前面有一个Frame了,这个就出不来了
      

  2.   

    按照 “swinging(山不在高) ”做修改通过了。可是现在我连上数据库的“Login表”,点击“确定”又没反映。数据库连接没有问题。
     public void actionPerformed(ActionEvent event)
      {
        Object source = event.getSource();
        if(okButton.equals(source))
        {
          try
          {
            LoginSql loginSql = new LoginSql();
            if (nameField.getText().equals(loginSql.nameStu) && pwdField.getPassword().equals(loginSql.pwdStu))
            {
              mainFrame = new MainWindow();
              mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              mainFrame.show();
              dispose();
            }
          }
          catch(Exception e){}
        }
      

  3.   

    请参考:
    回复人: sniper_bat(sniper_bat) ( ) 信誉:99  2003-09-14 11:15:00  得分:0 
     
     
      mainFrame.show();会使当前Frame变成独占的
    如果你前面有一个Frame了,这个就出不来了
    对FRAME的处理已经不是很清楚怎么做了,因为我好几年没有用它了,手头的一本SWING书不在,
    建议你改进下自己的调试代码方式,
    至少你可以在这里设置断点并单步跟踪来发现到底问题出在哪里,这样会更好解决,老实说,我没有心思
    来调试你的程序。另外:
    nameField.getText().equals(loginSql.nameStu) && pwdField.getPassword().equals(loginSql.pwdStu))这句可能仍然是有问题的,
    这句的前提之一是nameField.getText() != null,对pwdField同理,
    当然,如果你保证这2个方法不返回NULL,就算了。我前面给出的没有NULL判断,因为我是直接拿你的STRING的:
    "530520".equals(pwdField.getText())
    所以不需要对"530520"判断NULL,equals方法参数是null的话是会返回false的。
      
     
      

  4.   

    不太明白,我觉得问题不在这。因为不做getText()处理,直接点击button进入没有问题,或不连数据库用nameField.getText() == "maple" && pwdField.getText()== "530520" 然后输入“maple”和“530520”也没有问题。
      

  5.   

    ft 楼主,
    如果你已经经过了一些单步调试,那么应该大概知道错在哪里,不把情况说清楚怎么行,
    如果没有那就单步调试找到问题,还有,刚看了你的代码:
    catch(Exception e){}
    这句很危险,如果你不对异常做处理,那么TRY CATCH还有什么实在意义吗?
    简单的改成:
    catch(Exception e) {
        e.printStackTrace();
    }
    看看有没有异常先。还有,这个程序显然是很大可能是在逻辑判断是有问题,那么请先把所有逻辑结果打印出来看看是否和自己本来应该结果相同,如果不同就知道问题了。如果你做了这些事就说出结果并说出你对程序错误的判断,没有的话,就去试,
    我一开始就说了:最简单的调试方法:在每个分支都放个输出语句来检验程序的逻辑几分钟就可以定位错误,我看只要一分钟。最后再嘱咐你一句,不但是逻辑判断的结果是否为TRUE,连参与逻辑计算的所有值都打印出来,
    gogogo
      

  6.   

    输出顺序:
    why
    why2
    maple   530520public void actionPerformed(ActionEvent event)
      {
        Object source = event.getSource();
        if(okButton.equals(source))
        {
          System.out.println("why");
          try
          {
            System.out.println("why2");
            LoginSql loginSql = new LoginSql();
            System.out.println(loginSql.nameStu+loginSql.pwdStu);
            
            if (nameField.getText().equals(loginSql.nameStu) &&  //看来是这的问题
                pwdField.getText().equals(loginSql.pwdStu))      //可我不知道怎么解决
            {
              System.out.println("why3");        //这句没能显示
              mainFrame = new MainWindow();
              mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
              mainFrame.setVisible(true);
              dispose();
            }
          }
          catch (Exception e)
          {
            e.printStackTrace();
          }
        }
        if(cancelButton.equals(source))
        {
           System.exit(0);
        }
      }
      

  7.   

    把nameField.getText()和pwdField.getText()也打印出来不就知道了吗?
    还有:
    nameField.getText().equals(loginSql.nameStu)
    pwdField.getText().equals(loginSql.pwdStu)
    都打出来,
    结果还不是一目了然?