Problems with Console and Umlauts

Hi,



I just updated my jME3-project again with SVN and I got a new Exception:)

I’m not quite sure wether NiftyGUI or jME3 is causing the Exception, but as soon as I enter a Umlaut (somehow umlaut sounds really weird in English:D), for example ä, into a Console in NiftyGUI it crashes with the following Exception:

[java]SCHWERWIEGEND: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main]

java.lang.NullPointerException

at com.jme3.font.BitmapFont.updateText(BitmapFont.java:240)

at com.jme3.font.BitmapText.assemble(BitmapText.java:180)

at com.jme3.font.BitmapText.updateLogicalState(BitmapText.java:174)

at com.jme3.niftygui.RenderDeviceJme.renderFont(RenderDeviceJme.java:170)

at de.lessvoid.nifty.render.NiftyRenderEngineImpl.renderText(NiftyRenderEngineImpl.java:216)

at de.lessvoid.nifty.elements.render.TextRenderer.renderLine(TextRenderer.java:253)

at de.lessvoid.nifty.elements.render.TextRenderer.renderLines(TextRenderer.java:166)

at de.lessvoid.nifty.elements.render.TextRenderer.render(TextRenderer.java:150)

at de.lessvoid.nifty.elements.Element.renderElement(Element.java:455)

at de.lessvoid.nifty.elements.Element.render(Element.java:433)

at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:472)

at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:463)

at de.lessvoid.nifty.elements.Element.render(Element.java:434)

at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:472)

at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:466)

at de.lessvoid.nifty.elements.Element.render(Element.java:434)

at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:472)

at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:466)

at de.lessvoid.nifty.elements.Element.render(Element.java:434)

at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:472)

at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:466)

at de.lessvoid.nifty.elements.Element.render(Element.java:434)

at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:472)

at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:466)

at de.lessvoid.nifty.elements.Element.render(Element.java:443)

at de.lessvoid.nifty.elements.Element.renderInternalChildElements(Element.java:472)

at de.lessvoid.nifty.elements.Element.renderChildren(Element.java:466)

at de.lessvoid.nifty.elements.Element.render(Element.java:434)

at de.lessvoid.nifty.screen.Screen.renderLayers(Screen.java:256)

at de.lessvoid.nifty.Nifty.render(Nifty.java:167)

at com.jme3.niftygui.NiftyJmeDisplay.postQueue(NiftyJmeDisplay.java:131)

at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:664)

at com.jme3.renderer.RenderManager.render(RenderManager.java:691)

at de.bazinga.marblemania.game.Game.update(Game.java:272)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:145)

at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:133)

at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:199)

at java.lang.Thread.run(Thread.java:680)[/java]







And one more thing:

How can I make the Console loose the Focus? I’m using the Console as a Chat and sometimes when somebody starts a Game all the Keys pressed are also entered into the Console, but that shouldn’t really happen. So how can I remove the Focus from the Console?



Greets,

Dennis

Does nobody has an Idea what causes the Exception?

I thought this one shouldn’t be too hard to fix since the Bug came with one of the last updates to the SVN.



The Exception also only seems to happen with the Console. Other Textfields are working fine.

Bumping makes the post vanish earlier, theres an “unreplied” filter…

One of the characters used in the string is not defined in the font.

Did the umlaut work before the SVN update that caused the crash?

I commited a fix to SVN just now so it would ignore undefined characters, so that should at least fix the crash.

Yep, before the update everything worked. At least I’m 99% sure that it worked, because everytime I used an Umlaut there I remembered that I still need to add this to the Ingame-Chat.



The Fix works fine. It doesn’t crash anymore:)

Thanks

I got a new Exception when I type in an Umlaut:

Code:
SCHWERWIEGEND: Uncaught exception thrown in Thread[LWJGL Renderer Thread,5,main] java.lang.NullPointerException at com.jme3.font.BitmapFont.getCharacterAdvance(BitmapFont.java:99) at com.jme3.niftygui.RenderFontJme.getCharacterAdvance(RenderFontJme.java:103) at de.lessvoid.nifty.elements.tools.FontHelper.getVisibleCharactersFromStart(FontHelper.java:21) at de.lessvoid.nifty.controls.textfield.controller.TextFieldControl.calcLastVisibleIndex(TextFieldControl.java:254) at de.lessvoid.nifty.controls.textfield.controller.TextFieldControl.updateCursor(TextFieldControl.java:189) at de.lessvoid.nifty.controls.textfield.controller.TextFieldControl.inputEvent(TextFieldControl.java:164) at de.lessvoid.nifty.controls.console.controller.ConsoleControl.inputEvent(ConsoleControl.java:73) at de.lessvoid.nifty.controls.NiftyInputControl.keyEvent(NiftyInputControl.java:38) at de.lessvoid.nifty.elements.Element.keyEvent(Element.java:1460) at de.lessvoid.nifty.controls.FocusHandler.keyEvent(FocusHandler.java:211) at de.lessvoid.nifty.screen.Screen.keyEvent(Screen.java:332) at de.lessvoid.nifty.Nifty.processKeyboardEvent(Nifty.java:202) at com.jme3.niftygui.InputSystemJme.forwardEvents(InputSystemJme.java:123) at de.lessvoid.nifty.Nifty.render(Nifty.java:163) at com.jme3.niftygui.NiftyJmeDisplay.postQueue(NiftyJmeDisplay.java:136) at com.jme3.renderer.RenderManager.renderViewPort(RenderManager.java:660) at com.jme3.renderer.RenderManager.render(RenderManager.java:687) at de.bazinga.marblemania.game.Game.update(Game.java:269) at com.jme3.system.lwjgl.LwjglAbstractDisplay.runLoop(LwjglAbstractDisplay.java:144) at com.jme3.system.lwjgl.LwjglDisplay.runLoop(LwjglDisplay.java:141) at com.jme3.system.lwjgl.LwjglAbstractDisplay.run(LwjglAbstractDisplay.java:198) at java.lang.Thread.run(Thread.java:680)

After I added the following Code after Line 98 (BitmapCharacter c = charSet.getCharacter(curChar);) it works again:
Code:
if(c == null) return 0;


It's just a quick Fix, but it works for now :)

Dennis

Fixed now!

Thanks :slight_smile: