发生输出异常时如何保留程序的测试结果?

时间:2011-10-28 08:49:17

标签: java

我需要对程序中的逻辑进行一些输入。 我的程序的逻辑基本上是这样的:

- 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;

问题是,如果用户指定了无效的输出文件,则所有测试结果都将丢失,程序将终止。如果他选择了无效的输出文件,我想给用户第二次尝试选择输出文件。

我的输出代码目前如下所示:

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();
}

但是,如果用户不明白出了什么问题,他可能反复选择同一个文件,从而创建一个(某种)无限循环。 有没有替代这种方法,或防止循环的方法?或者我想出的方法是什么?

2 个答案:

答案 0 :(得分:0)

可能是它的帮助...在捕获异常后,您可以向用户显示正确的消息,说明他选择的O / p文件有什么问题...
还有一个计数器背后的主要思想是用户选择2或3次错误文件然后程序将终止...

答案 1 :(得分:0)

这看起来像一个无限循环,但事实并非如此。它等待外部条件。 你想等多久取决于你。但在大多数情况下,只要您允许用户取消,您就不需要最大重试次数或超时。如果用户不想提供数据,则会按取消或取消您的应用程序。或者应用程序将永远运行。你在乎吗?

比较

while (needsUserData) {
   askForUserData()
}

waitForUserData()

只是不做递归,你可能会运行堆栈空间=)