@Override
    public void initialize(AppStateManager stateManager, Application app) {
        renderManager = app.getRenderManager();
        assetManager = app.getAssetManager();
        inputManager = app.getInputManager();
        for (Binding binding : bindings) {
            bind(binding);
        }
        super.initialize(stateManager, app);
    }
This appState is for debug purpose only, and was made to provide an easy way 
to test shaders, with a live update capability.

This class provides and easy way to reload a material and catches compilation
errors when needed and displays the error in the console.

If no error occur on compilation, the material is reloaded in the scene.

You can either trigger the reload when pressing a key (or whatever input is 
supported by Triggers you can attach to the input manager), or trigger it 
when a specific file (the shader source) has been changed on the hard drive.

Usage : 

MaterialDebugAppState matDebug = new MaterialDebugAppState();
stateManager.attach(matDebug);
matDebug.registerBinding(new KeyTrigger(KeyInput.KEY_R), whateverGeometry);  

this will reload the material of whateverGeometry when pressing the R key.

matDebug.registerBinding("Shaders/distort.frag", whateverGeometry); 

this will reload the material of whateverGeometry when the given file is 
changed on the hard drive.

you can also register bindings to the appState with a post process Filter
 
@author Nehon
jme3-core/src/main/java/com/jme3/util/MaterialDebugAppState.java