出力例外が発生したときにプログラムのテスト結果を保持する方法は?

私は自分のプログラムの中でロジックについて何か入力が必要です。 私のプログラムのロジックは基本的に次のようになります:

- Ask user to select input file;
-- If exception --> error message, exit program;
-- Otherwise --> continue program, perform tests;
- After tests have been completed, ask user to select output file;
-- If exception --> error message, exit program;
-- Otherwise --> save results to file, exit program;

問題は、ユーザーが無効な出力ファイルを指定すると、すべてのテスト結果が失われ、プログラムが終了することです。無効な出力ファイルを選択した場合、出力ファイルを選択する2回目の試みをユーザに与えたいと思います。

私の出力コードは現在次のようになっています:

public void printToFile() {

    JFileChooser outputFile;
    File outFileName;

    outputFile = new JFileChooser();

    outputFile.showSaveDialog(null);
    outFileName = outputFile.getSelectedFile();
    try {
        PrintStream outFile = new PrintStream(outFileName);
       //print results to file
    } catch (Exception e) {
        System.out.print("Can't be saved to this file! \n");
        System.exit(0);//exit program
    }
}

私が考えることができる唯一の解決策は、 catch ブロックを次のコードに置き換えることです:

catch (Exception e) {
    System.out.print("Can't be saved to this file! \n");
    printToFile();
}

しかし、ユーザーが何が間違っているのか理解できない場合、彼は何度も同じファイルを繰り返し選択して、無限ループ(ある種の)ループを作成します。 この方法に代わる方法はありますか、またはループを防ぐ方法はありますか?それとも私が行く道を思い付いた方法ですか?

0
System.exit()の代わりにFile Not Found(ファイルが見つからない場合)の条件を繰り返すキャッチでwhileループを使用しないでください。
追加された 著者 user991710,

2 答え

あなたの選択したO/Pファイルに何が問題なのかをユーザーに伝えるメッセージを表示することができます。 また、その背後にある主なアイデアは、ユーザーが2〜3時間間違ったファイルを選択してプログラムを終了するということです。

0
追加された

これは無限ループのように見えますが、そうではありません。それは外部条件を待つ。 待つ時間はあなた次第です。しかし、ほとんどの場合、ユーザーにキャンセルを許可する限り、最大再試行またはタイムアウトは必要ありません。ユーザーは、データを提供したくない場合は、キャンセルまたはアプリケーションの終了を押します。または、アプリケーションは永遠に実行されます。手入れする?

比較する

while (needsUserData) {
   askForUserData()
}

〜と

waitForUserData()

ちょうど再帰をしないでください、スタックスペースを実行するかもしれません=)

0
追加された
ありがとう、whileループは確かに再帰より優れたソリューションです。より良いオプションが提案されていない場合は、これは私のために行く方法になります:)
追加された 著者 Maza89,