2011-10-28 85 views
0

我需要在我的程序中的邏輯輸入。 我的程序的邏輯基本上是這樣的:如何在發生輸出異常時保留程序的測試結果?

- 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

爲什麼不使用while循環與閉鎖復發如果條件找不到文件而不是System.exit()? – user991710

回答

0

這看起來像一個無限循環,但事實並非如此。它等待外部條件。 你想等多久就取決於你。但是在大多數情況下,只要允許用戶取消,就不需要最大重試次數或超時時間。如果用戶不想提供數據,用戶將按取消或殺死你的應用程序。或者應用程序將永遠運行。你關心?

比較

while (needsUserData) { 
    askForUserData() 
} 

waitForUserData() 

乾脆不要做遞歸,您可能會遇到堆棧空間=)

+0

謝謝,while循環的確是比遞歸更好的解決方案。如果沒有更好的選擇建議,這將是我的方式:) – Maza89

0

可能是它的幫助...在發現異常後,您可以向用戶顯示正確的消息,說明他所選擇的O/P文件有什麼問題...
並且還提出了一個計數器,是用戶選擇2或3時間錯誤的文件,然後程序將終止...

相關問題