Hi,
I am trying to find a bug in my first gwt project. I wrote another little project with just 3 classes to show just the behavior I don't understand.
I try to initialize objects in JavaScript (need that to use an existing js script in my (new) Java Code).
For my test I simply want to get an Object with a number array and read that...but the call of get(i) leads to 'Something other than a double was returned from JSNI method'.
Can anybody point me in the right direction please!?
Thanks a lot!! :)
JavaScript:
var TestObj = {};
/* helper function to get such an object
* not possible to get it directly?!*/
function getMem1(x,y){
return new TestObj.member1([x,y]);
}
TestObj.member1 = function(p){
// should be an array of two floating point values (saved as double in java)
this.p = p;
}
My Java Object:
public class TestObjJava {
private double x;
private double y;
public TestObjJava(double x, double y) {
this.x = x;
this.y = y;
}
public native TestObjJS getAsJSObj() /*-{
return $wnd.getMem1(this.x, this.y)
}-*/;
}
My JavaScriptObject
public class TestObjJS extends JavaScriptObject {
protected TestObjJS() {}
public final native JsArrayNumber getP() /*-{ return this.p; }-*/;
}
The code that leads to the error:
public void onModuleLoad() {
TestObjJava jObj = new TestObjJava(12, 23);
TestObjJS jsObj = jObj.getAsJSObj();
JsArrayNumber p = jsObj.getP();
System.out.println(p);
for(int i=0; i<p.length(); i++){
System.out.println(i+": "+p.get(i));
}
}
The full error message:
onModuleLoad() threw an exception
Exception while loading module andymel.tests.gwttests.client.GWTTests. See Development Mode for details.
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:411)
at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:526)
at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:364)
at java.lang.Thread.run(Unknown Source)
Caused by: com.google.gwt.dev.shell.HostedModeException: Something other than a double was returned from JSNI method '@com.google.gwt.core.client.JsArrayNumber::get(I)': JS value of type undefined, expected double
at com.google.gwt.dev.shell.JsValueGlue.get(JsValueGlue.java:112)
at com.google.gwt.dev.shell.ModuleSpace.invokeNativeDouble(ModuleSpace.java:238)
at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeDouble(JavaScriptHost.java:59)
at com.google.gwt.core.client.JsArrayNumber$.get$(JsArrayNumber.java)
at andymel.tests.gwttests.client.GWTTests.onModuleLoad(GWTTests.java:30)
... 9 more