I’ve been trying to get this to work for a very long time now and I’m sure there must be an obvious solution. I am trying to use Nifty in an Android JME application, and decided to get familiar with it by running the TestNiftyGUI code sample through Android Studio. Unfortunately I haven’t been able to get them to work and get the following errors. I’m also not certain what dependencies the sample code requires. The code I’ve including in this post is slightly different from the original due to my attempts to make it work but the errors are the same in any case once the full range of Nifty packages have been added to the project including:
eventbus.jar
jglfont-core.jar
jME3-android.jar
jME3-blender.jar
jME3-care.jar
jME3-jogg.jar
jME3-lwjgl.jar
jME3-lwjgl-natives.jar
jME3-niftygui.jar
jME3-plugins.jar
jME3-testdata.jar
lwjgl.jar
nifty.jar
nifty-default-controls.jar
nifty-default-controls-javadoc.jar
nifty-style-black.jar
xmlpull-xpp3.jar
Many thanks in advance.
Here are the errors:
09-19 02:02:26.425 22501-22549/com.openarbrowser.nifty E/com.jme3.app.AndroidHarness﹕ SEVERE Exception thrown in Thread[GLThread 3889,5,main]
java.lang.NoSuchMethodError: No virtual method render(Lcom/jme3/renderer/RenderManager;)V in class Lcom/jme3/font/BitmapText; or its super classes (declaration of 'com.jme3.font.BitmapText' appears in /data/app/com.openarbrowser.nifty-1/base.apk)
at com.jme3.niftygui.RenderDeviceJme.renderFont(RenderDeviceJme.java:250)
at de.lessvoid.nifty.render.ScalingRenderDevice.renderFont(ScalingRenderDevice.java:108)
at de.lessvoid.nifty.render.NiftyRenderEngineImpl.renderText(NiftyRenderEngineImpl.java:271)
at de.lessvoid.nifty.elements.render.TextRenderer.renderLine(TextRenderer.java:291)
at de.lessvoid.nifty.elements.render.TextRenderer.renderLines(TextRenderer.java:192)
at de.lessvoid.nifty.elements.render.TextRenderer.render(TextRenderer.java:173)
at de.lessvoid.nifty.elements.Element.renderElement(Element.java:627)
at de.lessvoid.nifty.elements.Element.render(Element.java:605)
at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:644)
at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:637)
at de.lessvoid.nifty.elements.Element.render(Element.java:615)
at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:644)
at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:637)
at de.lessvoid.nifty.elements.Element.render(Element.java:606)
at de.lessvoid.nifty.screen.Screen.renderLayers(Screen.java:313)
at de.lessvoid.nifty.Nifty.render(Nifty.java:280)
at com.jme3.niftygui.NiftyJmeDisplay.postQueue(NiftyJmeDisplay.java:169)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:979)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1035)
at com.jme3.app.SimpleApplication.update(SimpleApplication.java:252)
at com.jme3.app.AndroidHarness.update(AndroidHarness.java:467)
at com.jme3.system.android.OGLESContext.onDrawFrame(OGLESContext.java:349)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1522)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239)
09-19 02:03:40.882 22501-22501/com.openarbrowser.nifty E/WindowManager﹕ android.view.WindowLeaked: Activity com.openarbrowser.nifty.NiftyActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView{81988c0 V.E..... R....... 0,0-777,720} that was originally added here
at android.view.ViewRootImpl.<init>(ViewRootImpl.java:375)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:271)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)
at android.app.Dialog.show(Dialog.java:298)
at com.jme3.app.AndroidHarness$1.run(AndroidHarness.java:331)
at android.os.Handler.handleCallback(Handler.java:746)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5343)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
09-19 02:03:41.975 22501-23298/com.openarbrowser.nifty E/AndroidRuntime﹕ FATAL EXCEPTION: GLThread 3894
Process: com.openarbrowser.nifty, PID: 22501
java.lang.NoSuchMethodError: No virtual method render(Lcom/jme3/renderer/RenderManager;)V in class Lcom/jme3/font/BitmapText; or its super classes (declaration of 'com.jme3.font.BitmapText' appears in /data/app/com.openarbrowser.nifty-1/base.apk)
at com.jme3.niftygui.RenderDeviceJme.renderFont(RenderDeviceJme.java:250)
at de.lessvoid.nifty.render.ScalingRenderDevice.renderFont(ScalingRenderDevice.java:108)
at de.lessvoid.nifty.render.NiftyRenderEngineImpl.renderText(NiftyRenderEngineImpl.java:271)
at de.lessvoid.nifty.elements.render.TextRenderer.renderLine(TextRenderer.java:291)
at de.lessvoid.nifty.elements.render.TextRenderer.renderLines(TextRenderer.java:192)
at de.lessvoid.nifty.elements.render.TextRenderer.render(TextRenderer.java:173)
at de.lessvoid.nifty.elements.Element.renderElement(Element.java:627)
at de.lessvoid.nifty.elements.Element.render(Element.java:605)
at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:644)
at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:637)
at de.lessvoid.nifty.elements.Element.render(Element.java:615)
at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:644)
at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:637)
at de.lessvoid.nifty.elements.Element.render(Element.java:606)
at de.lessvoid.nifty.screen.Screen.renderLayers(Screen.java:313)
at de.lessvoid.nifty.Nifty.render(Nifty.java:280)
at com.jme3.niftygui.NiftyJmeDisplay.postQueue(NiftyJmeDisplay.java:169)
at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:979)
at com.jme3.renderer.RenderManager.render(RenderManager.java:1035)
at com.jme3.app.SimpleApplication.update(SimpleApplication.java:252)
at com.jme3.app.AndroidHarness.update(AndroidHarness.java:467)
at com.jme3.system.android.OGLESContext.onDrawFrame(OGLESContext.java:349)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1522)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1239)
Here is the code:
package com.openarbrowser.nifty;
import com.jme3.app.SimpleApplication;
import com.jme3.material.Material;
import com.jme3.math.Vector3f;
import com.jme3.niftygui.NiftyJmeDisplay;
import com.jme3.scene.Geometry;
import com.jme3.scene.shape.Box;
import de.lessvoid.nifty.Nifty;
import de.lessvoid.nifty.screen.Screen;
import de.lessvoid.nifty.screen.ScreenController;
public class NiftyJME extends SimpleApplication implements ScreenController {
private static final String TAG = "NiftyJME";
//Nifty class for the GUI
private Nifty nifty;
public static void main(String[] args){
NiftyJME app = new NiftyJME();
app.setPauseOnLostFocus(false);
app.start();
}
@Override
public void simpleInitApp() {
// Do not display statistics
setDisplayStatView(false);
setDisplayFps(false);
Box b = new Box(Vector3f.ZERO, 1, 1, 1);
Geometry geom = new Geometry("Box", b);
Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
mat.setTexture("ColorMap", assetManager.loadTexture("Interface/Logo/Monkey.jpg"));
geom.setMaterial(mat);
rootNode.attachChild(geom);
NiftyJmeDisplay niftyDisplay = new NiftyJmeDisplay(assetManager,
inputManager,
audioRenderer,
guiViewPort);
nifty = niftyDisplay.getNifty();
nifty.fromXml("Interface/Nifty/HelloJme.xml", "start");
// attach the nifty display to the gui view port as a processor
guiViewPort.addProcessor(niftyDisplay);
//guiViewPort.setEnabled(true);
//guiViewPort.setClearFlags(false, true, false);
flyCam.setEnabled(false);
}
@Override
public void bind(Nifty nifty, Screen screen) {
this.nifty = nifty;
Screen myScreen = nifty.getCurrentScreen();
System.out.println("Enter Bind - screen = " + myScreen);
}
@Override
public void onStartScreen() {
System.out.println("Enter onStartScreen");
}
@Override
public void onEndScreen() {
System.out.println("Enter onEndScreen");
}
public void quit(){
nifty.gotoScreen("end");
}
@Override
public void simpleUpdate(float tpf) {
}
}