Bir çıktı istisnası oluştuğunda bir programın test sonuçlarını nasıl muhafaza edilir?

Programımdaki mantığa biraz girmem lazım. Programımın mantığı temelde şöyle:

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

Sorun, kullanıcı geçersiz bir çıktı dosyası belirtirse, tüm test sonuçları kaybolur ve program sona erer. Kullanıcıya, geçersiz bir çıktı dosyası seçtiğinde bir çıktı dosyası seçerken ikinci bir deneme yapmak istiyorum.

Çıkış kodum şu anda şöyle görünüyor:

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

Düşünebildiğim tek çözüm, catch bloğunu aşağıdaki kodla değiştirmektir:

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

Ancak, kullanıcı neyin yanlış gittiğini anlamıyorsa, aynı dosyayı tekrar tekrar seçebilir ve böylece bir (sonsuz) sonsuz döngü oluşturabilir. Bu yönteme alternatif mi yoksa döngüyü önlemenin bir yolu var mı? Yoksa gitmenin yolu ile geldiğim yöntem mi?

0
Neden System.exit() yerine File Not Found ise durumu yinelenen catch ile bir süre döngü kullanmayın?
katma yazar user991710, kaynak

2 cevap

İstisna ettikten sonra kullanıcı için uygun bir mesaj gösterebilirsin ... seçtiği bir O/p dosyasıyla ilgili sorunun ne olduğuna dair uygun bir mesaj gösterebilirsin ...
ve aynı zamanda kullanıcının arkasında 2 veya 3 kez yanlış dosya seçtiğinin arkasındaki ana fikri sayacak ve program sona erecek ...

0
katma

Bu sonsuz bir döngüye benziyor, ama öyle değil. Harici bir durum için beklemek. Ne kadar beklemek istediğiniz size bağlı. Ancak çoğu durumda, kullanıcının iptal etmesine izin verdiğiniz sürece, maksimum yeniden deneme veya zaman aşımına ihtiyacınız yoktur. Kullanıcı verileri sağlamak istemezse, uygulamanızı iptal eder veya uygulamayı öldürür. Veya uygulama sonsuza kadar çalışacaktır. Umurunda mı?

karşılaştırmak

while (needsUserData) {
   askForUserData()
}

ile

waitForUserData()

Sadece özyineleme yapma, yığın alanı çalıştırabilirsiniz =)

0
katma
Teşekkürler, süre döngü gerçekten de özendirmeden daha iyi bir çözümdür. Daha iyi bir seçenek önerilmiyorsa, bu benim için gitmenin yolu olacak :)
katma yazar Maza89, kaynak