Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Error when cancel the showInputDialog

I want to create a input dialog box when new record is created and save the user input as input into the file.

Here is the code :

String input = JOptionPane.showInputDialog(null, "Enter name :  ", "New Record!", 1);                //This to let user input name
    try
    {
        JOptionPane.showMessageDialog(null, "Thanks for playing.", "Thanks", 1);            //Show this dialog after user input
        HighestScoreFile.HighestScoreFile(input, hours, minutes, seconds, click);                 //Store the data into a file, the `method` is in another class.
    }
    catch(IOException ex){}

When there is no user input or any input, the OK button work fine, but if I click the cancelbutton, it returns these errors :

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at HighestScoreFile.HighestScoreFile(HighestScoreFile.java:22)
    at MemoryGame$ButtonListener.actionPerformed(MemoryGame.java:329)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6505)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6270)
    at java.awt.Container.processEvent(Container.java:2229)
    at java.awt.Component.dispatchEventImpl(Component.java:4861)
    at java.awt.Container.dispatchEventImpl(Container.java:2287)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
    at java.awt.Container.dispatchEventImpl(Container.java:2273)
    at java.awt.Component.dispatchEvent(Component.java:4687)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707)
    at java.awt.EventQueue.access$000(EventQueue.java:101)
    at java.awt.EventQueue$3.run(EventQueue.java:666)
    at java.awt.EventQueue$3.run(EventQueue.java:664)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
    at java.awt.EventQueue$4.run(EventQueue.java:680)
    at java.awt.EventQueue$4.run(EventQueue.java:678)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

How can I solve it?

like image 372
Chin Avatar asked May 18 '12 17:05

Chin


People also ask

How does JOptionPane handle cancellation?

If the user clicks "cancel", the response will be null. If they click "ok" without entering any text the response will be the empty string. But your code does not handle a situation, if you your input is empty and you hit OK button.

What does JOptionPane Showinputdialog do?

With this method we can prompt the user for input while customizing our dialog window. The showConfirmDialog returns either String or Object and can be called using the following combinations of parameters: Object (returns String) – Shows a question-message dialog requesting input from the user.

What is the use of JOptionPane in Java?

JOptionPane makes it easy to pop up a standard dialog box that prompts users for a value or informs them of something. For information about using JOptionPane , see How to Make Dialogs, a section in The Java Tutorial. Asks a confirming question, like yes/no/cancel.


2 Answers

String input = ....
if (input!=null) { ...
like image 55
Andrew Thompson Avatar answered Oct 25 '22 02:10

Andrew Thompson


If the user clicks on "cancel", input will be null.

You should enter the try block only if the user clicks on "ok" or you should add an if to check if input is null before trying to use it!

Now, you can actually disable the cancel button with

JOptionPane.showInputDialog(null, "Enter name :  ", "New Record!", JOptionPane.OK_OPTION);

or checking if the user clicked on cancel with

if (input == null){
    // Do something
} else {
    try {
    JOptionPane.showMessageDialog(null, "Thanks for playing.", "Thanks", 1);
    HighestScoreFile.HighestScoreFile(input, hours, minutes, seconds, click);
    } catch(IOException ex){}
}
like image 26
StepTNT Avatar answered Oct 25 '22 01:10

StepTNT