but why I try to add stuff to the window (like radio buttons etc.) I get a null pointer exception. I've been reading up about common null pointer exceptions with FengGUI, but I haven't found a solution yet

From the stack trace, this looks like it might be a thread synchronization problem. Are you creating the window on a different thread than the one MainApp.run() method is running from? If so, this could cause a problem if the loading state finishes and tries to switch to the ingame state before the window has been fully instantiated. You could try synchronizing on an Object instance every time the window and its components are accessed or changed.

Oh, and about where to put the display.display(). I am not familiar with fenggui myself - what does the display() method do? If it updates the contents of the canvas, for example, a good place for it might be in either the state's tick() or paint() method.

--EDIT--Another place I thought of to check for thread synchronization problems is when calling the MainApp.stateEvent() method. If you are using the same setup as in the example I posted above, make sure this method is being called from the same thread that the State.tick() method is being called from (i.e. the MainApp.run() thread). From the stack trace, I can see that it is, so this is not causing your current problem.

--EDIT #2--One more potential problem I just thought of is the fact that paint() always runs on a different thread than tick(), so it might be a good idea to use a synchronized interface to a "safeToPaint" boolean. Set the boolean to false when the state is initializing or shutting down, to avoid null pointer exceptions. I hadn't considered this when I created the above example applet. Again, this doesn't appear to be related to your current problem, though.