我需要对程序中的逻辑进行一些输入。 我的程序的逻辑基本上是这样的:
- 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();
}
但是,如果用户不明白出了什么问题,他可能反复选择同一个文件,从而创建一个(某种)无限循环。 有没有替代这种方法,或防止循环的方法?或者我想出的方法是什么?
答案 0 :(得分:0)
可能是它的帮助...在捕获异常后,您可以向用户显示正确的消息,说明他选择的O / p文件有什么问题...
还有一个计数器背后的主要思想是用户选择2或3次错误文件然后程序将终止...
答案 1 :(得分:0)
这看起来像一个无限循环,但事实并非如此。它等待外部条件。 你想等多久取决于你。但在大多数情况下,只要您允许用户取消,您就不需要最大重试次数或超时。如果用户不想提供数据,则会按取消或取消您的应用程序。或者应用程序将永远运行。你在乎吗?
比较
while (needsUserData) {
askForUserData()
}
与
waitForUserData()
只是不做递归,你可能会运行堆栈空间=)