2011-08-08 106 views
0

好吧,所以我几乎得到了这个。但似乎有一些逻辑错误,我无法解决。请注意,我不能使用try/catch。不需要问为什么删除文件,如果它崩溃我的应用程序(2)


编辑

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

我希望它删除这是造成我崩溃的文件。如果应用程序崩溃,但它似乎并不奏效。我是说错了还是什么? 混淆

最后编辑

OK玩弄得多绕后,我终于得到它的工作!谢谢大家

+0

,为什么要删除呢?你不能清除它吗? –

+0

该应用处理数组中的图片,并且所有图片都位于一个文件夹中,因此我无法清除整个文件夹 – RayCharles

+0

请更多显示流程的代码。 – Jacob

回答

1

从你的最后一个问题我明白了,你

  • 处理图像,
  • 一个或多个图像会崩溃的JVM,
  • 我们不能捕获该异常/错误和
  • 我们要删除下次运行

一个简单的方法是这样的腐败形象:

  1. 每一次,你从一个图像文件读取的字节之前,坚持这种形象的名字命名的文件:
  2. 每一次,图像已成功处理(如processingImage.txt),删除processingImage.txt
  3. 如果应用程序崩溃,则processingImage.txt包含有问题的图像的名称
  4. 如果启动该应用程序,请检查是否存在processingImage.txt,读取图像的名称,删除图像并删除processingImage.txt
+0

不起作用,总是会删除第一个文件 – RayCharles

+0

如果严格按照* this *算法,它只会删除'processingImage.txt'文件中指定的文件(除非*文件夹中的每个*文件都会导致程序崩溃,确实,它会*总是*删除第一张图片;)) –

0

我对此有不好的感觉,但是您可以在您的应用程序中添加一个关闭钩子。 (请注意,在处理关闭挂钩时,唯一杀死应用程序的方法是通过任务管理器 - 因此请确保您的关闭挂钩真的有效/不会永久/不会导致死锁)

以下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. 
+0

我在哪里申报主?因为我的应用程序只使用方法 – RayCharles

+0

主要只是为了在应用程序与未捕获的异常崩溃时隐藏(并在我发布之前测试)钩子也被执行。可以从任何地方调用'Runtime.getRuntime()。addShutdownHoock(...)'方法。 – pmnt

相关问题