Java Tomcat servlet和JFrame

Java Tomcat servlet和JFrame,java,jakarta-ee,tomcat,servlets,jframe,Java,Jakarta Ee,Tomcat,Servlets,Jframe,我在我的raspberry pi上运行Tomcat服务器。当有人浏览我的服务器时,servlet会启动一个JFrame,在我的电视(连接到Pi)上显示一些信息 在servlet中,它是如何生成的: public static JFrame gui; @Override public void init() throws ServletException { // super.init() not needed if (gui==null) gui = launchUi(); e

我在我的raspberry pi上运行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?还是我做错了?(那么正确的方法是什么?)
谢谢

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

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

如果它可以首先显示
JFrame
,您应该能够使用
finalize
方法销毁该框架。我还尝试了这个
@Override public void destroy(){gui.setVisible(false);gui.dispose();gui=null;}
但这两条错误消息仍会显示。实际上,您不应该关心此错误消息。它在tomcat取消部署应用程序时打印。但你说过当tomcat关机时会发生这种情况。这意味着进程无论如何都将关闭,操作系统可以防止所有可能的内存泄漏。只有在未关闭服务器的情况下取消部署应用程序时,此消息才相关。您还可以尝试按名称查找此线程,并调用
setDaemon(true)
。这可能会阻止这个警告。谢谢你,我会照原样告诉你。