我想在創建新記錄時創建輸入對話框,並將用戶輸入保存爲input
到文件中。取消showInputDialog時出錯
下面是代碼:
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)
我該如何解決?
由於取消禁用取消按鈕。它工作正常。對不起,我的小問題。 – Chin
可能有一些用法提到,並非所有的'JOptionPane.showInputDialog(...)'方法都描述瞭如果點擊取消按鈕關閉對話框時返回的內容。如果單擊「取消」,只有參數數量最多的方法聲明返回「null」。 – Timmos
@Timmos好點。 Java Docs有時可能會有些遲鈍,並且「假定」對用戶(我們)來說不明顯的知識。我幾乎可以看到程序員,因爲他們打開了源代碼並被迫(寫入)編寫代碼註釋。對他們來說,它比每個較短的版本都'顯而易見',被稱爲'null'或標準默認值的更多操作數版本 - 所以它從來不會*發生*讓他們在文檔中提到這一點..我確信我們可以假設,但是看到明確記錄的內容會很好。或者至少'@see'版本用於更多細節..''。 –