【问题标题】:Stream closed before the program finishes [duplicate]在程序完成之前关闭流[重复]
【发布时间】:2012-03-10 00:02:29
【问题描述】:

我正在使用码头服务器接收来自 http 客户端的呼叫。

我正在使用 BufferedWriter 对象编写日志文件以进行调试。

服务器始终在运行以接收呼叫。

如何告诉程序仅在服务器停止时关闭流 (log_file.close)?

我不应该停止服务器,但在程序终止之前(例如,当我触摸终止按钮时)我该如何关闭流文件?

【问题讨论】:

  • 你在哪里使用 BufferedWriter 对象?在 Jetty 上的一些 Web 应用程序中?
  • 我在我的 Startup 类中使用它作为类的对象(Startup 包含我的 main 方法,我在这个 main 中初始化它:_logWriter = new BufferedWriter(new FileWriter("log_file.txt" ));
  • 那么,如果我理解正确的话——你想听听其他进程是否被终止了?
  • 当服务器进程终止时,但问题是它是否会与在主进程(不是服务器的一部分)中创建和使用的 Bufferedstream 对象相关

标签: java jetty bufferedwriter


【解决方案1】:

如果您的代码在 Web 应用程序(又名战争)中运行,您可以(这实际上是最佳实践)实现 ServletContextListener 并将其注册到您的 web.xml

contextInitialized你可以进行必要的初始化操作。

contextDestroyed你可以关闭流。

【讨论】:

    【解决方案2】:

    如果您正在运行嵌入式 Jetty,那么您有几个选择。

    您尚未指明 Jetty 的哪个版本,因此我无法为您提供确切的代码,但您的选择是:

    • 在服务器中注册一个“LifeCycle”对象,并在该生命周期对象中实现stop 方法以关闭您的日志文件。 (使用 addLifeCycleaddBean 之类的东西,具体取决于您的 Jetty 版本)

    • 在JVM中添加关闭线程(Runtime.addShutdownHook

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-30
      • 2017-10-11
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多