Hello,
I am getting an error when I try to display an Image in another class/state. The error I am getting is “Uncaught exception thrown in Thread[LWJGL Renderer Thread, 5m main] Null Pointer Exception”
Here is my code:
Main:
[java]package mygame;
import com.jme3.app.SimpleApplication;
import com.jme3.renderer.RenderManager;
import com.jme3.system.AppSettings;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.imageio.ImageIO;
public class Main extends SimpleApplication {
MainMenu MainMenu = new MainMenu();
public static AppSettings cfg = new AppSettings(true);
public static void main(String[] args) {
Main app = new Main();
// All the settings Can be changed when the game starts
cfg.setFrameRate(60); // Frame Rate
cfg.setVSync(true); // Prevents page tearing
cfg.setFrequency(cfg.getFrequency()); // Set to screen refresh rate
cfg.setResolution(1920, 1080);
cfg.setFullscreen(true);
cfg.setSamples(2); // Anti-aliasing
cfg.setTitle("Ghosts®"); // Window name
try {
cfg.setIcons(new BufferedImage[]{ImageIO.read(new File("assets/Interface/icon.gif"))}); // Window Icon
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, "Icon missing.", ex);
}
cfg.setSettingsDialogImage("Interface/Splash.png"); // Splash screen
app.setSettings(cfg);
app.start();
}
@Override
public void simpleInitApp() {
stateManager.attach(MainMenu);
}
@Override
public void simpleUpdate(float tpf) {
//TODO: add update code
}
@Override
public void simpleRender(RenderManager rm) {
//TODO: add render code
}
}[/java]
Main Menu Class
[java]package mygame;
import com.jme3.app.Application;
import com.jme3.app.SimpleApplication;
import com.jme3.app.state.AbstractAppState;
import com.jme3.app.state.AppStateManager;
import com.jme3.asset.AssetManager;
import com.jme3.scene.Node;
import com.jme3.system.AppSettings;
import com.jme3.ui.Picture;
public class MainMenu extends AbstractAppState {
private SimpleApplication app;
private Node rootNode;
private Node guiNode;
private AssetManager assetManager;
private AppSettings cfg;
@Override
public void initialize(AppStateManager stateManager, Application app) {
super.initialize(stateManager, app);
this.app = (SimpleApplication) app;
cfg = Main.cfg;
this.rootNode = this.app.getRootNode();
this.guiNode = this.app.getGuiNode();
Picture pic = new Picture("HUD Picture");
pic.setImage(assetManager, "/Interface/Splash.png", true); <strong>Error is occurring here</strong>
pic.setWidth(cfg.getWidth()/2);
pic.setHeight(cfg.getHeight()/2);
pic.setPosition(cfg.getWidth()/4, cfg.getHeight()/4);
guiNode.attachChild(pic);
}
@Override
public void update(float tpf) {
}
@Override
public void cleanup() {
super.cleanup();
}
}[/java]
What am I doing wrong. Also I did check to see that Splash.png exists in the interface folder. Thanks for any assistance.