开发者

Tomcat webapp error - application started thread [AWT-Windows] but has failed to stop it - memory leak?

I didn't notice it until today during some testing locally on my pc, that Tomcat had posted an error in the log file. I'm using Tomcat 6.0.29 and Java JDK 1.6.

Dec 1, 2010 12:36:57 pm org.apache.catalina.core.StandardContext reload INFO: Reloading this Context has started Dec 1, 2010 12:36:57 pm org.apache.catalina.loader.WebappClassLoader clearReferencesThreads SEVER: The web application [/AutoSpyder] appears to have started a thread named [AWT-Windows] but has failed to stop it. This is very likely to create a memory leak.

What? I've never seen this before. So I checked my log file from yesterday, and sure enough, this error was there too. I don't quite understand what's causing this.

Can I assume that it would have to be one of my servlets that uses objects from the java.awt package? If so, how do I pinpoint the code that is causing this?

Edited to add Thread Dump

2010-12-01 14:28:18
Full thread dump Java HotSpot(TM) Client VM (17.1-b03 mixed mode, sharing):

"JMX server connection timeout 34" daemon prio=6 tid=0x03069400 nid=0x960 in Object.wait() [0x0461f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a [I)
    at com.sun.jmx.remote.internal.ServerCommunicatorAdmin$Timeout.run(ServerCommunicatorAdmin.java:150)
    - locked  (a [I)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"RMI Scheduler(0)" daemon prio=6 tid=0x03069000 nid=0xe88 waiting on condition [0x045cf000]
   java.lang.Thread.State: TIMED_WAITING (parking)
    at sun.misc.Unsafe.park(Native Method)
    - parking to wait for   (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
    at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
    at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2025)
    at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:609)
    at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:602)
    at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"RMI TCP Connection(1)-192.168.0.102" daemon prio=6 tid=0x0308a400 nid=0xebc runnable [0x0457f000]
   java.lang.Thread.State: RUNNABLE
    at java.net.SocketInputStream.socketRead0(Native Method)
    at java.net.SocketInputStream.read(SocketInputStream.java:129)
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
    at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
    - locked  (a java.io.BufferedInputStream)
    at java.io.FilterInputStream.read(FilterInputStream.java:66)
    at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:517)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
    at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
    at ja开发者_Python百科va.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    -  (a java.util.concurrent.locks.ReentrantLock$NonfairSync)

"RMI TCP Accept-0" daemon prio=6 tid=0x039e0c00 nid=0xc68 runnable [0x0452f000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
    - locked  (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:453)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
    at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"AWT-Windows" daemon prio=6 tid=0x02b65400 nid=0x7c4 runnable [0x042cf000]
   java.lang.Thread.State: RUNNABLE
    at sun.awt.windows.WToolkit.eventLoop(Native Method)
    at sun.awt.windows.WToolkit.run(WToolkit.java:293)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"Java2D Disposer" daemon prio=10 tid=0x02fccc00 nid=0x93c in Object.wait() [0x039df000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
    - locked  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
    at sun.java2d.Disposer.run(Disposer.java:127)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"http-8080-6" daemon prio=6 tid=0x03322800 nid=0xfec in Object.wait() [0x0395f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"http-8080-5" daemon prio=6 tid=0x02ba5c00 nid=0xdbc in Object.wait() [0x0390f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"http-8080-4" daemon prio=6 tid=0x02ff6400 nid=0xa1c in Object.wait() [0x038bf000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"http-8080-3" daemon prio=6 tid=0x0317e400 nid=0x850 in Object.wait() [0x0386f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"http-8080-2" daemon prio=6 tid=0x03314800 nid=0xf9c in Object.wait() [0x0381f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"http-8080-1" daemon prio=6 tid=0x02efe800 nid=0x250 in Object.wait() [0x037cf000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.await(JIoEndpoint.java:458)
    - locked  (a org.apache.tomcat.util.net.JIoEndpoint$Worker)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:484)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"TP-Monitor" daemon prio=6 tid=0x02eed800 nid=0xd64 in Object.wait() [0x0375f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
    at org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable.run(ThreadPool.java:565)
    - locked  (a org.apache.tomcat.util.threads.ThreadPool$MonitorRunnable)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"TP-Processor4" daemon prio=6 tid=0x0318b000 nid=0x998 runnable [0x0370f000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
    - locked  (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:453)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at org.apache.jk.common.ChannelSocket.accept(ChannelSocket.java:312)
    at org.apache.jk.common.ChannelSocket.acceptConnections(ChannelSocket.java:666)
    at org.apache.jk.common.ChannelSocket$SocketAcceptor.runIt(ChannelSocket.java:877)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"TP-Processor3" daemon prio=6 tid=0x0308f800 nid=0x92c in Object.wait() [0x036bf000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)
    - locked  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"TP-Processor2" daemon prio=6 tid=0x03192400 nid=0xfac in Object.wait() [0x0366f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)
    - locked  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"TP-Processor1" daemon prio=6 tid=0x03182400 nid=0x8d8 in Object.wait() [0x0361f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
    at java.lang.Object.wait(Object.java:485)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:662)
    - locked  (a org.apache.tomcat.util.threads.ThreadPool$ControlRunnable)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"http-8080-Acceptor-0" daemon prio=6 tid=0x03172400 nid=0xf04 runnable [0x035cf000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
    - locked  (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:453)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at org.apache.tomcat.util.net.DefaultServerSocketFactory.acceptSocket(DefaultServerSocketFactory.java:61)
    at org.apache.tomcat.util.net.JIoEndpoint$Acceptor.run(JIoEndpoint.java:352)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"ContainerBackgroundProcessor[StandardEngine[Catalina]]" daemon prio=6 tid=0x03163400 nid=0xbe8 waiting on condition [0x0357f000]
   java.lang.Thread.State: TIMED_WAITING (sleeping)
    at java.lang.Thread.sleep(Native Method)
    at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1579)
    at java.lang.Thread.run(Thread.java:662)

   Locked ownable synchronizers:
    - None

"GC Daemon" daemon prio=2 tid=0x0307bc00 nid=0x110 in Object.wait() [0x0349f000]
   java.lang.Thread.State: TIMED_WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a sun.misc.GC$LatencyLock)
    at sun.misc.GC$Daemon.run(GC.java:100)
    - locked  (a sun.misc.GC$LatencyLock)

   Locked ownable synchronizers:
    - None

"Low Memory Detector" daemon prio=6 tid=0x02aecc00 nid=0x5b4 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"CompilerThread0" daemon prio=10 tid=0x02ae7000 nid=0x798 waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Attach Listener" daemon prio=10 tid=0x02ae5800 nid=0xddc waiting on condition [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Signal Dispatcher" daemon prio=10 tid=0x02ae4000 nid=0xc00 runnable [0x00000000]
   java.lang.Thread.State: RUNNABLE

   Locked ownable synchronizers:
    - None

"Finalizer" daemon prio=8 tid=0x02add400 nid=0x378 in Object.wait() [0x02caf000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
    - locked  (a java.lang.ref.ReferenceQueue$Lock)
    at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

   Locked ownable synchronizers:
    - None

"Reference Handler" daemon prio=10 tid=0x02adbc00 nid=0x474 in Object.wait() [0x02c5f000]
   java.lang.Thread.State: WAITING (on object monitor)
    at java.lang.Object.wait(Native Method)
    - waiting on  (a java.lang.ref.Reference$Lock)
    at java.lang.Object.wait(Object.java:485)
    at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
    - locked  (a java.lang.ref.Reference$Lock)

   Locked ownable synchronizers:
    - None

"main" prio=6 tid=0x002b7000 nid=0x14c runnable [0x0090f000]
   java.lang.Thread.State: RUNNABLE
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
    - locked  (a java.net.SocksSocketImpl)
    at java.net.ServerSocket.implAccept(ServerSocket.java:453)
    at java.net.ServerSocket.accept(ServerSocket.java:421)
    at org.apache.catalina.core.StandardServer.await(StandardServer.java:389)
    at org.apache.catalina.startup.Catalina.await(Catalina.java:662)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:614)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)

   Locked ownable synchronizers:
    - None

"VM Thread" prio=10 tid=0x02ada400 nid=0x210 runnable 

"VM Periodic Task Thread" prio=10 tid=0x02aefc00 nid=0x79c waiting on condition 

JNI global references: 1529


Try taking a thread dump to get a list of all the threads running on your server. From this, you may be able to pinpoint exactly which class started the thread based on the stack traces

Windows

on the console window press ctrl + break

Unix

in a command line enter: kill -3 <pid>


It's to do with Windows (i.e. MS Windows) and native calls to the underlying OS. These would normally be GUI-type window operations, but could be other OS-specific things, e.g Clipboard or Font related, for instance.

If there's nothing obvious that you can see in your code that might relate to why it's being triggered, though, I'd not worry about it - that warning's more for the general case where spinning off new threads in a web-app isn't something you should be explicitly doing without a full appreciation of the potential issues.


We have tomcat server and jsf. JSF client will request images from the server and cause AWT-Windows thread to get started. Appears to cause a memory leak since threads contextClassLoader is the WebappClassLoader.

Looks like calling Java2DResource can caused AWT-Windows thread to be created -

Daemon Thread [http-8080-1] (Suspended (entry into method in Thread))
Thread.(Runnable, String) line: 444 <-- thread name is AWT-Windows WToolkit.() line: 244 NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: 39
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27
Constructor.newInstance(Object...) line: 513 Class.newInstance0() line: 355
Class.newInstance() line: 308
Toolkit$2.run() line: 846
AccessController.doPrivileged(PrivilegedAction) line: not available [native method]
Toolkit.getDefaultToolkit() line: 826
D3DGraphicsDevice.() line: 47
SurfaceManagerFactory.createCachingManager(BufferedImage) line: 48
SurfaceManager.getManager(Image) line: 54
SurfaceData.getDestSurfaceData(Image) line: 123 Win32GraphicsEnvironment(SunGraphicsEnvironment).createGraphics(BufferedImage) line: 389
HeadlessGraphicsEnvironment.createGraphics(BufferedImage) line: 76
BufferedImage.createGraphics() line: 1137
TabStripeImage(Java2Dresource).getImage(ResourceContext) line: 115
TabStripeImage(Java2Dresource).send(ResourceContext) line: 89
ResourceLifecycle.sendResource(ResourceContext, InternetResource) line: 219 ResourceLifecycle.send(ResourceContext, InternetResource) line: 158 InternetResourceService.load(Object, Object) line: 335
LRUMapCache.load(Object, Object) line: 116
LRUMapCache.get(Object, Object) line: 87
InternetResourceService.serviceResource(String, HttpServletRequest, HttpServletResponse) line: 195
InternetResourceService.serviceResource(HttpServletRequest, HttpServletResponse) line: 141
Filter(BaseFilter).doFilter(ServletRequest, ServletResponse, FilterChain) line: 508 Ajax4jsfFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 56
SeamFilter$FilterChainImpl.doFilter(ServletRequest, ServletResponse) line: 69
LoggingFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 60
SeamFilter$FilterChainImpl.doFilter(ServletRequest, ServletResponse) line: 69
SeamFilter.doFilter(ServletRequest, ServletResponse, FilterChain) line: 158 ApplicationFilterChain.internalDoFilter(ServletRequest, ServletResponse) line: 235
ApplicationFilterChain.doFilter(ServletRequest, ServletResponse) line: 206
StandardWrapperValve.invoke(Request, Response) line: 233
StandardContextValve.invoke(Request, Response) line: 191
StandardHostValve.invoke(Request, Response) line: 127
ErrorReportValve.invoke(Request, Response) line: 102
AccessLogValve.invoke(Request, Response) line: 555
StandardEngineValve.invoke(Request, Response) line: 109 CoyoteAdapter.service(Request, Response) line: 298
Http11AprProcessor.process(long) line: 861
Http11AprProtocol$Http11ConnectionHandler.process(long) line: 579
AprEndpoint$Worker.run() line: 1584 Thread.run() line: 619 [local variables unavailable]


It looks like you are running JMX and I'm getting the impression that the Tomcat JMX server may be what's actually setting up the timer thread. In addition to the ones you mentioned in your parallel post on the JavaRanch, there's a java2D thread in the dump you have here.

I can't tell 100% because I don't know which threads were the parents for the orphan threads. If you could determine that, it would help.

Your Affine Transform is definitely pulling in graphics, however. It's a graphical function that will attempt to use your video card as a hardware accelerator. If you don't specify headless operation, it will tap into your windowing system to do so.


Inspired by this thread I found the following solution:

You only need to attach the AWT-Window-Thread to System-Classloader instead to Wabapp-Classloader. You can do it in a ServletContextListener like this:

public void contextInitialized(ServletContextEvent evt) {
    Thread thread = Thread.currentThread();
    ClassLoader ccl = thread.getContextClassLoader(); // PUSH
    try {
        thread.setContextClassLoader(ClassLoader.getSystemClassLoader());
        Toolkit.getDefaultToolkit().createImage(new byte[]{});
    } finally {
        thread.setContextClassLoader(ccl); // POP
    }
}


Are you running including some kind of graphical library like Jasper, JFreechart, LiquidOffice, StyleReport, ... that might interact with AWT ?

Try starting tomcat by providing the -Djava.awt.headless=true property to see that gets rid of the exception

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜