【问题标题】:Tomcat servlets and JFrameTomcat servlet 和 JFrame
【发布时间】:2014-01-20 21:06:41
【问题描述】:

我在我的树莓派上运行一个 Tomcat 服务器。当有人浏览我的服务器时,servlet 会启动一个 JFrame,在我的电视(连接到 Pi)上显示一些信息。

这就是它的制作方式,在 servlet 中:

public static JFrame gui;

@Override
public void init() throws ServletException { // super.init() not needed
    if (gui==null) gui = launchUi();
    else if(!gui.isVisible()) gui.setVisible(true);
}

问题是,当我停止服务器时,JFrame 没有关闭。这是我在 Tomcat 日志中发现的。

janv. 20, 2014 9:53:18 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myapp] appears to have started a thread named [AWT-Shutdown] but has failed to stop it. This is very likely to create a memory leak.
janv. 20, 2014 9:53:18 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [/myapp] appears to have started a thread named [AWT-EventQueue-0] but has failed to stop it. This is very likely to create a memory leak.

如何强制关闭 JFrame?还是我做错了? (那么正确的方法是什么?) 谢谢

【问题讨论】:

  • 如果它可以首先显示JFrame,您应该可以在finalize方法中销毁框架。

标签: java jakarta-ee tomcat servlets jframe


【解决方案1】:

将逻辑实现到destroy()方法中:

public void destroy() {
    gui.setVisible(false);
}

【讨论】:

  • 我也试过这个@Override public void destroy() { gui.setVisible(false); gui.dispose(); gui = null; },但仍然显示两个错误消息
  • 其实你不应该关心这个错误信息。它在 tomcat 取消部署您的应用程序时打印。但是你说它发生在tomcat关闭时。这意味着该进程无论如何都会关闭,并且操作系统可以防止所有可能的内存泄漏。仅当您在未关闭服务器的情况下取消部署应用程序时,该消息才相关。您也可以尝试按名称查找此线程并调用setDaemon(true)。这可能会阻止此警告。
  • 谢谢,我就这样吧。
猜你喜欢
  • 2013-09-20
  • 1970-01-01
  • 2016-10-24
  • 1970-01-01
  • 2016-12-30
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多