2017-09-27 6 views
0

キャンセルまたはXを押さない限り、ユーザーに正しいファイル名を入力させようとしています。しかし、彼が入力をキャンセルすると、プログラムはNullPointerExceptionをスローします。 。ユーザーがキャンセルボタンを押したときJava Swing:ユーザーに正しいファイル名を入力させることができません

public void openSaveAsDirectory() { 

    JDialog dialog = new JDialog(); 
    dialog.setTitle("Save file as"); 
    String name = JOptionPane.showInputDialog(adTable, "Please type a name for your file"); 
    if(name != null && !name.isEmpty()) { 

     File fileName = new File(SAVE_LOCATION + FILE_SEPERATOR + name + FILE_SUFFIX); 
     book.saveUser(fileName); 

    } 

    while(name.isEmpty()) { 
      name = JOptionPane.showInputDialog(adTable, "Please type a name for your file"); 
    } 
} 
+1

あなたの入力ダイアログをキャンセルすると、 'name'はnullになります。あなたは 'while(name.isEmpty()){'を実行します。 'name'はnullでもかまいません。 – nbokmans

+2

[NullPointerExceptionとは何か、それを修正するにはどうすればいいですか?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) ) – nbokmans

+2

ちょっと興味があります:なぜJOptionPaneとJFileChooserを使用していますか? – ControlAltDel

答えて

0

はあなたのコメントに基づいて、ここでは、それが空であるが、停止している限りの入力を要求し、更新されたバージョンです。

String name; 
do { 
    name = JOptionPane.showInputDialog(null, "Please type a name for your file"); 
    if(name == null) { //user hit cancel, break the loop 
     break; 
    } 
} while(name.isEmpty()); 
+0

これはユーザーを永遠に罠に陥らないでしょうか?なぜなら、name == nullは、ユーザーがキャンセルを押すと発生します。誤っていない場合はXが発生します。しかし、私はユーザーが入力を取り消すことができるようにしたい。 – lucas6198

+0

正直、それは永遠に求め続けます。あなたはあなたがそれを止めたいと言ったことは一度も言いませんでした。 –

+0

@ lucas6198あなたのニーズに基づいて答えを更新しました。 –

関連する問題