Hi.
First of all, thank you for putting together LWJGL; it’s just what I’ve been looking for and works perfectly. It’s really saved my project.
However, I’m having a little trouble getting to grips with something. Basically my situation is this: I want to create the Display and Keyboard (and probably other LWJGL objects in the future) in one thread, but I wish to have access to the same objects in other threads. For example, one thread will be making heavy use of Display and one will be making heavy use of Keyboard.
Last night I became very confused by all of this; if I jumped straight into the ‘run’ method of my Display-using Thread object, it would work perfectly, however using the ‘start’ method to begin a new thread caused a severe Null Pointer Exception when using Display.update. I decided to download the LWJGL code and dig around to find out exactly what happens at Display.update – eventually I discovered that there has been quite a bit of effort put in so that different threads can own different rendering contexts; exactly what I didn’t want to happen! 
In an attempt to amend this, as soon as the Display object was created, I stored the Context (through Display.getContext()) into a static object. On entering a different thread, I then used GLContext.useContext(), passing the stored Context object. This seemed to get rid of the Null Pointer Exception, which was nice, but now introduced a different error. On calling Display.update(), it now causes an “Invalid Operation 1282” error in glGetError(). After searching around on Google, I took some advice on this message board of placing Util.checkGLError() around the place. Even putting it immediately before the call to Display.update() didn’t find any errors though, so this has left me even more puzzled.
At the end of it, I decided that this method that I was using to evade the thread-local GLContext wasn’t the right way to go. So could anybody recommend a sensible method of acheiving what I want to acheive? In short, I want to be able to access exactly the same Display/Keyboard/etc. object from any of the threads in my program.