How to change button name in runtime?

I have following code:
[java]
package mygame;

import com.jme3.app.SimpleApplication;
import com.jme3.niftygui.NiftyJmeDisplay;
import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.builder.LayerBuilder;
import de.lessvoid.nifty.builder.PanelBuilder;
import de.lessvoid.nifty.builder.ScreenBuilder;
import de.lessvoid.nifty.controls.button.builder.ButtonBuilder;
import de.lessvoid.nifty.elements.Element;
import de.lessvoid.nifty.elements.render.TextRenderer;
import de.lessvoid.nifty.screen.DefaultScreenController;

/**

  • @author iamcreasy
    */
    public class Main extends SimpleApplication {

    public static void main(String[] args) {
    Main app = new Main();
    app.start();
    }
    Nifty nifty;

    @Override
    public void simpleInitApp() { // make the cube appear in the scene
    NiftyJmeDisplay niftyDisplay = new NiftyJmeDisplay(
    assetManager, inputManager, audioRenderer, guiViewPort);
    nifty = niftyDisplay.getNifty();
    guiViewPort.addProcessor(niftyDisplay);
    flyCam.setDragToRotate(true);
    nifty.loadStyleFile(“nifty-default-styles.xml”);
    nifty.loadControlFile(“nifty-default-controls.xml”);
    guiFont = assetManager.loadFont(“Fonts/aaa.fnt”);
    nifty.addScreen(“Screen_ID”, new ScreenBuilder(“Hello Nifty Screen”) {
    {
    controller(new DefaultScreenController()); // Screen properties

             // <layer>
             layer(new LayerBuilder("Layer_ID") {
                 {
                     childLayoutVertical(); // layer properties, add more...
    
                     // <panel>
                     panel(new PanelBuilder("Panel_ID") {
                         {
                             childLayoutCenter(); // panel properties, add more... 
    
                             // GUI elements
                             control(new ButtonBuilder("Button_ID", "Hello Nifty") {
                                 {
                                     alignCenter();
                                     valignCenter();
                                     height("5%");
                                     width("15%");
                                 }
                             });
    
                         }
                     });
                     // </panel>
                 }
             });
             // </layer>
         }
     }.build(nifty));
     // </screen>
    
     nifty.gotoScreen("Screen_ID"); // start the screen
     Element niftyElement = nifty.getCurrentScreen().findElementByName("Button_ID");
     niftyElement.getRenderer(TextRenderer.class).setText("hello world!");
    

    }
    }
    [/java]

it got
SEVERE: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]
java.lang.NullPointerException
at mygame.Main.simpleInitApp(Main.java:71)
at com.jme3.app.SimpleApplication.initialize(SimpleApplication.java:226)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.initInThread(LwjglAbstractDisplay.java:130)
at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:207)
at java.lang.Thread.run(Thread.java:662)

problem is solved
It is the code
[java]
Element niftyElement = nifty.getCurrentScreen().findElementByName(“Button_ID”);
niftyElement.getNiftyControl(Button.class).setText(“hello”); [/java]

2 Likes