Hi Tag and Pat,
Testing with 0.4.1 "out-of-the-box" behind my corporate firewall (ref the thread about problems with 0.4.0):
-> The globe still freezes for 20 seconds or so, and then it's ok for 5 seconds or so, and then it freezes again. This cycle repeats many times, but after a minute or two I didn't think the pattern would change, so I stopped trying. Here's the thread dump:
Code:
2007-12-06 09:30:42
Full thread dump Java HotSpot(TM) Client VM (1.6.0_01-b06 mixed mode):
"Idle World Wind Task " daemon prio=2 tid=0x0b0c4800 nid=0xa40 waiting on condition [0x1ea3f000..0x1ea3fc14]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff83f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.ArrayBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Retriever" daemon prio=2 tid=0x0b37dc00 nid=0x394 waiting on condition [0x1e9ef000..0x1e9efc94]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff8810> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.PriorityBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Retriever" daemon prio=2 tid=0x0b35ec00 nid=0x9e0 waiting on condition [0x1e99f000..0x1e99fd14]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff8810> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.PriorityBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Retriever" daemon prio=2 tid=0x0b3c7800 nid=0xa2c waiting on condition [0x1e14f000..0x1e14fd94]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff8810> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.PriorityBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Retriever" daemon prio=2 tid=0x0b2b7400 nid=0x7d8 waiting on condition [0x1e0ff000..0x1e0ffa14]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff8810> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.PriorityBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Retriever" daemon prio=2 tid=0x0b261800 nid=0x8d8 waiting on condition [0x1e0af000..0x1e0afa94]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff8810> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.PriorityBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Task " daemon prio=2 tid=0x0b0c6800 nid=0x940 waiting on condition [0x1ca8f000..0x1ca8fb14]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff83f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.ArrayBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Task " daemon prio=2 tid=0x0b0adc00 nid=0x8a4 waiting on condition [0x1ca3f000..0x1ca3fb94]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff83f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.ArrayBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Idle World Wind Task " daemon prio=2 tid=0x0b0ad400 nid=0x958 waiting on condition [0x1c9ef000..0x1c9efc14]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for <0x02ff83f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.ArrayBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"DestroyJavaVM" prio=6 tid=0x00266800 nid=0xa1c waiting on condition [0x00000000..0x0094fd4c]
java.lang.Thread.State: RUNNABLE
"AWT-EventQueue-0" prio=6 tid=0x0b200400 nid=0x970 runnable [0x0b63f000..0x0b63fd14]
java.lang.Thread.State: RUNNABLE
at java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(Unknown Source)
at java.net.InetAddress.getAddressFromNameService(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName0(Unknown Source)
at java.net.InetAddress.getAllByName(Unknown Source)
at java.net.InetAddress.getByName(Unknown Source)
at gov.nasa.worldwind.util.BasicNetworkStatus.isHostReachable(Unknown Source)
at gov.nasa.worldwind.util.BasicNetworkStatus.isNetworkUnavailable(Unknown Source)
at gov.nasa.worldwind.util.BasicNetworkStatus.isNetworkUnavailable(Unknown Source)
at gov.nasa.worldwind.retrieve.BasicRetrievalService.isAvailable(Unknown Source)
at gov.nasa.worldwind.layers.placename.PlaceNameLayer.sendRequests(Unknown Source)
at gov.nasa.worldwind.layers.placename.PlaceNameLayer.doRender(Unknown Source)
at gov.nasa.worldwind.layers.AbstractLayer.render(Unknown Source)
at gov.nasa.worldwind.AbstractSceneController.draw(Unknown Source)
at gov.nasa.worldwind.BasicSceneController.doRepaint(Unknown Source)
at gov.nasa.worldwind.AbstractSceneController.repaint(Unknown Source)
at gov.nasa.worldwind.WorldWindowGLAutoDrawable.doDisplay(Unknown Source)
at gov.nasa.worldwind.WorldWindowGLAutoDrawable.display(Unknown Source)
at com.sun.opengl.impl.GLDrawableHelper.display(GLDrawableHelper.java:78)
at javax.media.opengl.GLCanvas$DisplayAction.run(GLCanvas.java:435)
at com.sun.opengl.impl.GLDrawableHelper.invokeGL(GLDrawableHelper.java:194)
at javax.media.opengl.GLCanvas.maybeDoSingleThreadedWorkaround(GLCanvas.java:412)
at javax.media.opengl.GLCanvas.display(GLCanvas.java:244)
at javax.media.opengl.GLCanvas.paint(GLCanvas.java:277)
at javax.media.opengl.GLCanvas.update(GLCanvas.java:354)
at sun.awt.RepaintArea.updateComponent(Unknown Source)
at sun.awt.RepaintArea.paint(Unknown Source)
at sun.awt.windows.WComponentPeer.handleEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
"TimerQueue" daemon prio=6 tid=0x0b090400 nid=0xa88 in Object.wait() [0x0b5ef000..0x0b5efd94]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x031a4be8> (a javax.swing.TimerQueue)
at javax.swing.TimerQueue.run(Unknown Source)
- locked <0x031a4be8> (a javax.swing.TimerQueue)
at java.lang.Thread.run(Unknown Source)
"Timer-0" prio=6 tid=0x0b1fbc00 nid=0xa68 in Object.wait() [0x0b59f000..0x0b59fa14]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x03003b58> (a java.util.TaskQueue)
at java.lang.Object.wait(Object.java:485)
at java.util.TimerThread.mainLoop(Unknown Source)
- locked <0x03003b58> (a java.util.TaskQueue)
at java.util.TimerThread.run(Unknown Source)
"AWT-Windows" daemon prio=6 tid=0x0b029400 nid=0xa24 runnable [0x0b50f000..0x0b50fa94]
java.lang.Thread.State: RUNNABLE
at sun.awt.windows.WToolkit.eventLoop(Native Method)
at sun.awt.windows.WToolkit.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"AWT-Shutdown" prio=6 tid=0x0b028800 nid=0x214 in Object.wait() [0x0b4bf000..0x0b4bfb14]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02fc4180> (a java.lang.Object)
at java.lang.Object.wait(Object.java:485)
at sun.awt.AWTAutoShutdown.run(Unknown Source)
- locked <0x02fc4180> (a java.lang.Object)
at java.lang.Thread.run(Unknown Source)
"Java2D Disposer" daemon prio=10 tid=0x0b010c00 nid=0x8a8 in Object.wait() [0x0b46f000..0x0b46fb94]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02fc4218> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x02fc4218> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at sun.java2d.Disposer.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
"Low Memory Detector" daemon prio=6 tid=0x0ab2bc00 nid=0x910 runnable [0x00000000..0x00000000]
java.lang.Thread.State: RUNNABLE
"CompilerThread0" daemon prio=10 tid=0x0ab27000 nid=0x924 waiting on condition [0x00000000..0x0ad7f698]
java.lang.Thread.State: RUNNABLE
"Attach Listener" daemon prio=10 tid=0x0ab26000 nid=0xa34 runnable [0x00000000..0x00000000]
java.lang.Thread.State: RUNNABLE
"Signal Dispatcher" daemon prio=10 tid=0x0ab25000 nid=0xa28 waiting on condition [0x00000000..0x00000000]
java.lang.Thread.State: RUNNABLE
"Finalizer" daemon prio=8 tid=0x0ab13800 nid=0x3a4 in Object.wait() [0x0ac8f000..0x0ac8fa94]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02ef1300> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
- locked <0x02ef1300> (a java.lang.ref.ReferenceQueue$Lock)
at java.lang.ref.ReferenceQueue.remove(Unknown Source)
at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
"Reference Handler" daemon prio=10 tid=0x0ab12800 nid=0x998 in Object.wait() [0x0ac3f000..0x0ac3fb14]
java.lang.Thread.State: WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x02ef1390> (a java.lang.ref.Reference$Lock)
at java.lang.Object.wait(Object.java:485)
at java.lang.ref.Reference$ReferenceHandler.run(Unknown Source)
- locked <0x02ef1390> (a java.lang.ref.Reference$Lock)
"VM Thread" prio=10 tid=0x0ab0f800 nid=0x950 runnable
"VM Periodic Task Thread" prio=10 tid=0x0ab4e800 nid=0x288 waiting on condition
JNI global references: 1226
Heap
def new generation total 960K, used 310K [0x02a00000, 0x02b00000, 0x02ee0000)
eden space 896K, 32% used [0x02a00000, 0x02a49b60, 0x02ae0000)
from space 64K, 24% used [0x02af0000, 0x02af3e88, 0x02b00000)
to space 64K, 0% used [0x02ae0000, 0x02ae0000, 0x02af0000)
tenured generation total 16340K, used 13503K [0x02ee0000, 0x03ed5000, 0x06a00000)
the space 16340K, 82% used [0x02ee0000, 0x03c0fe00, 0x03c0fe00, 0x03ed5000)
compacting perm gen total 14080K, used 13939K [0x06a00000, 0x077c0000, 0x0aa00000)
the space 14080K, 99% used [0x06a00000, 0x0779cf28, 0x0779d000, 0x077c0000)
No shared spaces configured.
...but from the looks of it, I think there's not much that can be done on that front, except maybe not calling "BasicNetworkStatus.isHostReachable( )" from the Event dispatch thread...
The good news, though, is that once I modified ApplicationTemplate to set the offline mode to true via the WorldWind class, everything works like a charm. I believe you should make this method static (which I did for my test), because it's itself calling a static method (getNetworkStatus()). Probably just an oversight.
Many thanks for that offline mode, by the way, it will be very usefull for me too.. My users, like myself, are typically on a Defense network behind an (understandably) paranoid firewall, so I'll be either packaging my layers or get them from an internal WMS server...but I guess at that point I'll have to re-enable the network... hmmmm....something to think about
Glad to be of help!
Chiss!