Удаление файла, если он вылетает из моего приложения (2) - PullRequest
0 голосов
/ 08 августа 2011

хорошо, так что я почти получил это.Но, похоже, есть какая-то логическая ошибка, которую я не могу обойти.Обратите внимание, что я не могу использовать try / catch.Не нужно спрашивать, почему


РЕДАКТИРОВАТЬ

for(String File : List){


        final String FilePath = getPath() + "/" + File;
        Render renderer = renderFile(FilePath);
        Runtime.getRuntime().addShutdownHook(new Thread(){
             public void run() {
                    deleteFile(FilePath);
                }
            });

        deleteFile(FilePath);
        updateReport(stuff);
        writeReportToFile(Report.toString());

Я хочу, чтобы он удалил файл, который вызывает мой сбой ... если приложение вылетает, но оно не работает,Я называю это неправильно или как? растерян

ЗАКЛЮЧИТЕЛЬНОЕ РЕДАКТИРОВАНИЕ

Хорошо, после долгой игры я наконец-то заставил ее работать !!Спасибо всем

Ответы [ 2 ]

1 голос
/ 08 августа 2011

Из вашего последнего вопроса я вижу, что вы

  • обработка изображений,
  • одно или несколько изображений приведут к сбою JVM,
  • мы не можем поймать это исключение / ошибку и
  • мы хотим удалить поврежденное изображение при следующем запуске

Простое решение выглядит так:

  1. Каждый раз, перед тем как читать байты из файла изображения, сохраняйте имя этого изображения в файле (например: processingImage.txt)
  2. Каждый раз, когда изображение было успешно обработано, удаляйте processingImage.txt
  3. Если приложение вылетает, то processingImage.txt содержит имя испорченного изображения
  4. Если вы запустите приложение, проверьте, существует ли processingImage.txt, прочитайте имя изображения, удалите изображение и удалите processingImage.txt.
0 голосов
/ 08 августа 2011

У меня плохое предчувствие по этому поводу, но вы можете добавить в свое приложение хук отключения. (Имейте в виду, что при обработке перехватчиков завершения работы единственный способ убить ваше приложение - через диспетчер задач - поэтому убедитесь, что перехват отключения действительно работает / не работает вечно / не вызывает взаимоблокировок) *

Следующее main

public static void main(String[] args) {
    Runtime.getRuntime().addShutdownHook(new Thread() {
        public void run() {
                System.out.println("I'm called on shutown.");
            }
        });
    throw new RuntimeException("Uncaught Exception");
}

печатает это:

Exception in thread "main" java.lang.RuntimeException: Uncaught Exception
    at stackoverflowtests.ShutdownHookTester.main(ShutdownHookTester.java:11)
I'm called on shutown.
...