开发者

Deleting file if it crashes my app (2)

ok so i've nearly got this. But it seems there is some logic error that i can't get around. Note that i cannot use try/catch. No need to ask why


EDIT

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(开发者_StackOverflow中文版));

I want it to delete the file that's causing my crash .. if the app crashes but it doesn't seem to be working. Am i calling it wrongly or what? confused

FINAL EDIT

OK after much toying around i finally got it to work!! Thanks everyone


From your last question I see, that you

  • process images,
  • one or more images will crash the JVM,
  • we can't catch that exception/error and
  • we want to delete the corrupt image on the next run

An easy solution goes like that:

  1. Each time, before you read bytes from an image file, persist the name of that image to a file (like: processingImage.txt)
  2. Each time, an image has been processed succesfully, delete processingImage.txt
  3. If the application crashes, then processingImage.txt contains the name of the offending image
  4. If you start the application, check if processingImage.txt exists, read the name of the image, delete the image and delete processingImage.txt.


I have a bad feeling about this, but you could add a shutdown hook on your application. (Be warned, while the shutdown hooks are processed, the only way to kill your application is via task manager - so be sure that your shutdown hook really works/does not take forever/does not cause deadlocks)

The following 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");
}

prints this:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜