0

当我按下 sTime 等于的 JOptionPane.showInputDialog 窗口上的取消按钮时,如何防止此代码中出现 NullPointerException?(它位于“>>”标志处)

我的代码:

insertTableF.addActionListener(new ActionListener () { 
    public void actionPerformed(ActionEvent  e)
    {
        int wayPoint1 = 0;
        int wayPoint2 = 0;
        int PassTime = 0;
        Statement statementR;

        if (loggedIn == 1)
        {

            while(passedR ==0) 
            {
                try 
                {
                    if (wayPoint1==0) 
                    {
                        sTagR =JOptionPane.showInputDialog("Please enter the Rhino Tag number:");
                        iTagR = Integer.parseInt(sTagR);
                        wayPoint1 =1;
                    }
                    if (wayPoint2==0) 
                    {
                        sGPSX = JOptionPane.showInputDialog("Please enter the horizontal GPS Grid Numbers(eg.3123):");
                        iGPS = Integer.parseInt(sGPSX);

                        wayPoint2 = 1;
                    }

                    sGPSY = JOptionPane.showInputDialog("Please enter the vertical GPS Grid Letters(eg.XXYY:");
                    while (PassTime ==0) 
                    {
                        sTime = JOptionPane.showInputDialog("Please enter the Last date you saw the Rhino(YYYY-MM-DD):");
                        if (sTime != "")
                        {
                            if (isValidDate(sTime)) 
                            {
                                PassTime = 1;
                            } 
                            else 
                            {
                                JOptionPane.showMessageDialog(null, "Please use the date format YYYY-MM-DD.");
                            }
                        } 
                        else 
                        {
                            JOptionPane.showMessageDialog(null, "Please use the date format YYYY-MM-DD.");
                        }
                    }               
                    sLocation = JOptionPane.showInputDialog("Please enter the Last place you saw the Rhino:");

                    passedR =1;
                } 
                catch (NumberFormatException nfe) 
                {
                    passedR =0;
                    JOptionPane.showMessageDialog(null, "Please use numbers for the Rhino Tag field.");
                }
            }
        }
    }
});

我的格式代码:

    boolean isValidDate(String input) {
    if (input == null){
     try {
        format.setLenient(false);
        format.parse(input);
        return true;
     }
     catch(ParseException e){
          return false;
     }
    }
    return false;
}

对不起,很长的帖子。提前致谢。

这是我收到的错误消息:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at java.text.SimpleDateFormat.parse(SimpleDateFormat.java:1235)
    at java.text.DateFormat.parse(DateFormat.java:335)
    at RhinoGUI.isValidDate(RhinoGUI.java:92)
    at RhinoGUI$8.actionPerformed(RhinoGUI.java:507)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6288)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6053)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4651)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
4

4 回答 4

5

你的守卫条件isValidDate()是错误的:

if (input == null){

当然应该是

if (input != null){
于 2012-08-10T13:51:35.990 回答
4

采用

 if (input != null)

代替

 if (input == null)
于 2012-08-10T13:51:58.787 回答
1

您应该注意的另一件事:如果用户取消输入对话框,则JOptionPane.showInputDialog(...)返回。null目前你只寻找空字符串。延长

 if (sTime != "") { ... }

 if (sTime != null && !sTime.equals("")) { ... }

或者您可以拆分此检查以区分错误输入或取消:

 if (sTime == null) {
     // user cancelled 
 } else if (!isValidDate(sTime)) {
    // input of user has invalid format
 } else {
    // everything is fine, handle input
 }
于 2012-08-10T13:57:14.043 回答
1

愚蠢的错误是程序员生活的一部分:)

if (input == null) //Lets make sure we get a null pointer exception or nothing else
于 2012-08-10T13:57:59.157 回答