2014-01-20 51 views
0

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

这是制造的原理,在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被关闭?或者我做这一切都错了? (什么是正确的方法呢?) 感谢

+1

如果能在第一时间显示的'JFrame',你应该能够摧毁框架中'finalize'方法。 –

回答

0

逻辑落实到destroy()方法:

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

我也试过这个 '@覆盖 公共无效的destroy(){ gui.setVisible(假); gui.dispose(); gui = null; }'但这两个错误信息仍然显示 –

+1

其实你不应该关心这个错误信息。它在tomcat取消部署应用程序时打印。但是你说这是在tomcat关闭时发生的。这意味着该进程正在关闭,所有可能的内存泄漏都被操作系统阻止。只有在不关闭服务器的情况下取消部署应用程序时,该消息才是相关的。您也可以尝试按名称查找此线程,并调用'setDaemon(true)'。这可能会阻止此警告。 – AlexR

+0

谢谢,我会放过它。 –