Fixed minor issues, but now it works with many browsers (although still needs testing).
Next steps:
Make it work independently on the client-side. Currently each keystroke generates a server round-trip.
Make compatible with touch devices.
Regarding the latter, the most annoying thing is that the build-in onscreen keyboard pops up when a text element receives focus. If someone has an idea how to avoid it, it could save me a lot of research time.
My application always crashes when i press a key on the virtual keyboard
Mai 13, 2014 1:00:14 PM com.vaadin.server.DefaultErrorHandler doDefault
Schwerwiegend:
com.vaadin.server.ServerRpcManager$RpcInvocationException: Unable to invoke method onKeyClick in org.vaadin.majuk.virtualkeyboard.VirtualKeyboard$KeyClickRpc
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:170)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:118)
at com.vaadin.server.communication.ServerRpcHandler.handleBurst(ServerRpcHandler.java:207)
at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:111)
at com.vaadin.server.communication.PushHandler$2.run(PushHandler.java:160)
at com.vaadin.server.communication.PushHandler.callWithUi(PushHandler.java:238)
at com.vaadin.server.communication.PushHandler.onRequest(PushHandler.java:307)
at org.atmosphere.cpr.AsynchronousProcessor.action(AsynchronousProcessor.java:260)
at org.atmosphere.cpr.AsynchronousProcessor.suspended(AsynchronousProcessor.java:167)
at org.atmosphere.container.TomcatWebSocketUtil.doService(TomcatWebSocketUtil.java:137)
at org.atmosphere.container.Tomcat7AsyncSupportWithWebSocket.service(Tomcat7AsyncSupportWithWebSocket.java:59)
at org.atmosphere.cpr.AtmosphereFramework.doCometSupport(AtmosphereFramework.java:1464)
at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:219)
at org.atmosphere.websocket.DefaultWebSocketProcessor$2.run(DefaultWebSocketProcessor.java:183)
at org.atmosphere.util.VoidExecutorService.execute(VoidExecutorService.java:101)
at org.atmosphere.websocket.DefaultWebSocketProcessor.dispatch(DefaultWebSocketProcessor.java:178)
at org.atmosphere.websocket.DefaultWebSocketProcessor.invokeWebSocketProtocol(DefaultWebSocketProcessor.java:167)
at org.atmosphere.container.TomcatWebSocketHandler.onTextMessage(TomcatWebSocketHandler.java:92)
at org.apache.catalina.websocket.MessageInbound.onTextData(MessageInbound.java:78)
at org.apache.catalina.websocket.StreamInbound.doOnTextData(StreamInbound.java:191)
at org.apache.catalina.websocket.StreamInbound.onData(StreamInbound.java:139)
at org.apache.coyote.http11.upgrade.UpgradeProcessor.upgradeDispatch(UpgradeProcessor.java:88)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:313)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor63.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:168)
... 26 more
Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: 36
at java.lang.String.substring(Unknown Source)
at org.vaadin.majuk.virtualkeyboard.VirtualKeyboard$1.onKeyClick(VirtualKeyboard.java:74)
... 30 more