当我按下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)
答案 0 :(得分:5)
isValidDate()
中的保护条件错误:
if (input == null){
当然应该是
if (input != null){
答案 1 :(得分:4)
使用
if (input != null)
而不是
if (input == null)
答案 2 :(得分: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
}
答案 3 :(得分:1)
愚蠢的错误是程序员生活的一部分:)
if (input == null) //Lets make sure we get a null pointer exception or nothing else