【问题标题】:How to stop the java application from command prompt gracefully [duplicate]如何从命令提示符优雅地停止java应用程序[重复]
【发布时间】:2017-06-19 23:47:00
【问题描述】:

我正在开发一个 java 独立应用程序,它必须将一批文件上传到 rest api。我想在需要时从命令提示符停止应用程序,但如果应用程序正在上传文件,它必须完成该文件,并且必须在开始上传另一个文件之前停止。

【问题讨论】:

标签: java


【解决方案1】:

它不能在您希望的任何时候停止,因为(我假设)您的程序在单个线程上运行,因此必须按照给定的顺序完成每个任务。

上传文件列表时,您可以在一个线程的前端提供某种侦听器,而文件在后台上传。当 Thread1 收到它需要退出的信息时,它可以设置某种全局布尔值,线程 2 在开始上传第二个文件之前检查它。

将上传进程设为后台线程允许您修改进程中的程序。

如果您正在寻找有关正常退出程序的文档,可以在这里找到:http://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#exit%28int%29

【讨论】:

    【解决方案2】:

    您可以快速检查应用程序的退出代码 JVM 关闭挂钩中的 isUploading 标志。如果为假,则继续退出。如果为 true,则等待上传过程完成或超时。

    https://stackoverflow.com/a/17792988/2884613

    【讨论】:

      【解决方案3】:

      公共类主{

      public static void main(String[] args) {
      
          Runtime r = Runtime.getRuntime();
          r.addShutdownHook(new ShutdownHook());
      
          while(Flag.flag){
      
              System.out.println("Application is still running......");
      
      
          }
      
          if(!Flag.flag) {
              System.out.println("goin to exit the application");
              Flag.shutdownFlag = false;
              return;
          }
      
      }
      

      }

      公共类标志{

      public static boolean flag = true;
      public static boolean shutdownFlag = true;
      

      }

      公共类 ShutdownHook 扩展线程 {

      public void run() {
      
          System.out.println("Shutdown hook is initiated");
          Flag.flag = false;
      
          while (Flag.shutdownFlag) {
              System.out.println("Waiting for application to complete the task..");
          }
      
      }
      

      }

      我在命令提示符下运行 jar。一旦我们想停止应用程序,我们可以在命令提示符下按 ctrl+c。

      【讨论】:

        猜你喜欢
        • 2011-03-12
        • 2022-08-11
        • 1970-01-01
        • 2023-03-10
        • 2023-03-16
        • 2016-08-23
        • 1970-01-01
        • 2019-11-10
        相关资源
        最近更新 更多