5

新しいレコードが作成されたときに入力ダイアログボックスを作成し、ユーザー入力をファイルに保存したいと思いinputます。

コードは次のとおりです。

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){}

ユーザー入力または入力がない場合、OKボタンは正常に機能しますが、ボタンをクリックすると、cancel次のエラーが返されます。

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)

どうすれば解決できますか?

4

2 に答える 2

10
String input = ....
if (input!=null) { ...
于 2012-05-18T18:09:02.097 に答える
7

ユーザーが「キャンセル」をクリックするinputと、null になります。

tryユーザーが「OK」をクリックした場合にのみブロックに入るか、使用する前に nullifかどうかを確認するを追加する必要があります。input

これで、実際にキャンセルボタンを無効にすることができます

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

または、ユーザーがキャンセルをクリックしたかどうかを確認します

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){}
}
于 2012-05-18T18:11:38.883 に答える