当我在Windows中停止我的Tomcat服务器时有时候我需要等待很长时间,在这些情况下我收到了这个警告:
org.apache.catalina.loader.WebappClassLoaderBase.clearReferencesThreads The web application [ROOT] appears to have started a thread named [Thread-6] but has failed to stop it. This is very likely to create a memory leak.
Stack trace of thread:
sun.print.Win32PrintServiceLookup.notifyPrinterChange
sun.print.Win32PrintServiceLookup.access$100(Unknown Source)
sun.print.Win32PrintServiceLookup$PrinterChangeListener.run(Unknown Source)
我的网络应用中唯一与打印机连接的代码是可用打印机的读卡器:
PrintService[] printServices = PrinterJob.lookupPrintServices();
你知道如何避免这个问题吗?
答案 0 :(得分:2)
该线程为started by Win32PrintServiceLookup
itself,,除非它认为您使用的是Windows 98 ,它使用系统属性os.name
进行验证,因此这是一个时髦的(暂定的)解决方法:
String osName = System.getProperty("os.name");
if (osName.startsWith("Windows")) { // or SystemUtils.IS_OS_WINDOWS if you use commons-lang
System.setProperty("os.name", "Windows 98"); // Pretend you're on Win98
}
PrinterJob.lookupPrintServices();
System.setProperty("os.name", osName); // Restore original value
我还没有测试过(今天没有Windows系统),所以我希望它仍然可以获得一次列表。这也意味着您在应用程序生命周期内无法注册打印机的更改。