Java 如果我的应用程序崩溃,则删除文件(2)

Java 如果我的应用程序崩溃,则删除文件(2),java,error-handling,crash,Java,Error Handling,Crash,好的,我差不多拿到这个了。但似乎有一些逻辑错误,我无法回避。请注意,我不能使用try/catch。不用问为什么 编辑 我希望它删除导致我崩溃的文件。。如果应用程序崩溃,但似乎无法工作。我叫错了还是怎么了?迷茫 最终编辑 好吧,在玩了很多之后,我终于让它开始工作了!!谢谢大家从我看到的最后一个问题来看,您 处理图像 一个或多个映像将使JVM崩溃 我们无法捕获该异常/错误,并且 我们希望在下次运行时删除损坏的映像 一个简单的解决方案如下: 每次从图像文件读取字节之前,都要将该图像的名称保留到文

好的,我差不多拿到这个了。但似乎有一些逻辑错误,我无法回避。请注意,我不能使用try/catch。不用问为什么


编辑

我希望它删除导致我崩溃的文件。。如果应用程序崩溃,但似乎无法工作。我叫错了还是怎么了?迷茫

最终编辑


好吧,在玩了很多之后,我终于让它开始工作了!!谢谢大家

从我看到的最后一个问题来看,您

  • 处理图像
  • 一个或多个映像将使JVM崩溃
  • 我们无法捕获该异常/错误,并且
  • 我们希望在下次运行时删除损坏的映像
一个简单的解决方案如下:

  • 每次从图像文件读取字节之前,都要将该图像的名称保留到文件中(例如:
    processingImage.txt
  • 每次成功处理图像时,请删除
    processingImage.txt
  • 如果应用程序崩溃,则
    processingImage.txt
    包含有问题图像的名称
  • 如果启动应用程序,请检查是否存在
    processingImage.txt
    ,读取图像名称,删除图像并删除
    processingImage.txt

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

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

    为什么要删除它?你就不能清除它吗?该应用程序以数组方式处理图片,并且所有图片都在一个文件夹中,因此我无法清除显示流程的整个folderMore代码。我在哪里声明主文件夹?因为我的应用程序只使用方法,所以主要的目的只是去集中(并在发布之前进行测试),如果应用程序因未捕获的异常而崩溃,那么钩子也会被执行。
    Runtime.getRuntime().addshutdownhook(…)
    方法可以从任何地方调用。如果严格遵循此算法,它将只删除
    processingImage.txt
    中名为的文件(除非文件夹中的每个文件都使程序崩溃,否则它将始终删除第一个图像;)
    Exception in thread "main" java.lang.RuntimeException: Uncaught Exception
        at stackoverflowtests.ShutdownHookTester.main(ShutdownHookTester.java:11)
    I'm called on shutown.