That’s because you don’t know how to program software, and whilst it sounds like fun writing a game to learn, it’s probably the hardest way to go.
You really need to learn the basics first, like passing objects around, using constructors and assigning variables - which are all somewhere in the very beginning of learning any language.
We all started knowing nothing. We all have to learn. You must understand that you do, too. Please go and do some beginner tutorials. Make a calculator. A notepad. An image/file downloader. All of the skills you will learn will be transferable.
This allows you to pass your app to your control object so it can access it’s methods and variables.
Once you use the above constructor and pass your app to the control, the app you declared in the controls class will no longer be null so you successfully call app.getAssetManager();
EDIT:
you also are not doing anything by simply calling getAssetManager() you must return the value to your assetManager variable.
Since controlUpdate(tpf) is being called every tick, and the Geometry and Material only need to be set once, so the following lines could be moved out of update (maybe moved to constructor);
Geometry geo = (Geometry) spatial;
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
geo.setMaterial(mat);
… but you may need to begin with setting an initial color to the material that will likely be needed before the update is called.
Edit: Although, theoretically, you might want to apply the material to the spatial at it’s creation, before this control is even attached to it, and the color can be set from the control’s update each tick.
Second Edit: Also, I am not certain if there is a existing reason for creating an entirely new Camera just for this control, rather than using the Camera provided by your Main app (once it has been passed into constructor, like @JDC suggested); cam = app.getCamera();