2012-08-10 102 views
0

當我按下sTime等於的JOptionPane.showInputDialog窗口上的取消按鈕時,如何防止此代碼中出現NullPointerException? (它位於 '>>' 符號)如何防止此代碼中的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) 

回答

5

isValidDate()你的保護條件是錯誤的:

if (input == null){ 

當然這應該是

if (input != null){ 
+0

我剛纔看到:/ 我討厭犯愚蠢的錯誤 – AceFire6 2012-08-10 14:08:17

4

使用

if (input != null) 

代替

if (input == null) 
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 
} 
1

荒謬的錯誤是程序員的生活:)

if (input == null) //Lets make sure we get a null pointer exception or nothing else 
的一部分