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

注目すべきもう 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 に答える