2010-11-04 19 views
4

J'ai une application GWT qui inclut une applet intégrée. Je voudrais utiliser JNSI pour laisser les boutons GWT pousser les données à cette applet, mais pour le moment je ne peux même pas l'obtenir pour se connecter. Vous cherchez de l'aide - vous n'arrivez pas à trouver quoi que ce soit qui permette de faire parler les choses.GWT JSNI: invocation de méthodes d'applet?

Dans ma classe entrypoint je définis:

native void doSomething() /*-{ 
    $doc.applet_id.doSomething(); 
}-*/; 

Ce que j'accroche via clickHandler à un bouton. Au sein de la classe applet principale, il existe une méthode doSomething(), et dans la page je lance l'applet via:

<script> 
    var attributes = {codebase:'http://localhost:8888/', 
        code:'Applet.class', archive:'applet_test.jar', id:'applet_id', 
        width:100, height:40} ; 
    var parameters = {fontSize:16, jnlp_href:'launcher.jnlp'} ; 
    var version = '1.6' ; 
    deployJava.runApplet(attributes, parameters, version); 
</script> 

La trace de la pile est

com.google.gwt.event.shared.UmbrellaException: One or more exceptions caught, see full set in UmbrellaException#getCauses 
    at com.google.gwt.event.shared.SimpleEventBus.doFire(SimpleEventBus.java:214) 
    at com.google.gwt.event.shared.SimpleEventBus.fireEvent(SimpleEventBus.java:103) 
    at com.google.gwt.event.shared.HandlerManager.fireEvent(HandlerManager.java:96) 
    at com.google.gwt.user.client.ui.Widget.fireEvent(Widget.java:107) 
    at com.google.gwt.event.dom.client.DomEvent.fireNativeEvent(DomEvent.java:116) 
    at com.google.gwt.user.client.ui.Widget.onBrowserEvent(Widget.java:155) 
    at com.google.gwt.user.client.DOM.dispatchEventImpl(DOM.java:1308) 
    at com.google.gwt.user.client.DOM.dispatchEvent(DOM.java:1264) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessagesWhileWaitingForReturn(BrowserChannelServer.java:326) 
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:207) 
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:126) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:561) 
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeObject(ModuleSpace.java:269) 
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeObject(JavaScriptHost.java:91) 
    at com.google.gwt.core.client.impl.Impl.apply(Impl.java) 
    at com.google.gwt.core.client.impl.Impl.entry0(Impl.java:214) 
    at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at com.google.gwt.dev.shell.MethodAdaptor.invoke(MethodAdaptor.java:103) 
    at com.google.gwt.dev.shell.MethodDispatch.invoke(MethodDispatch.java:71) 
    at com.google.gwt.dev.shell.OophmSessionHandler.invoke(OophmSessionHandler.java:157) 
    at com.google.gwt.dev.shell.BrowserChannelServer.reactToMessages(BrowserChannelServer.java:281) 
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:531) 
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:352) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: com.google.gwt.core.client.JavaScriptException: (TypeError): $doc.applet_id.doSomething is not a function 
+0

Regardez ici http://www.rgagnon.com/howto.html sous Java/Javascript interaction sur la façon de faire avec js simple –

+0

@Romain: merci pour le lien, mais par rapport à ce sujet particulier, j'ai trouvé l'Oracle ne Sun site plus utile et sans spam: http://download.oracle.com/javase/tutorial/deployment/applet/invokingAppethemethodsFromJavaScript.html – Carl

Répondre

4

Apparemment, mon fichier jnlp également nécessaire

<param name="MAYSCRIPT" value="true"/>

dans la partie <applet-desc>. Ajoutant MAYSCRIPT:true aux attributs, cependant, ne semble pas fonctionner.

+0

Ma compréhension est que les applets déployés en utilisant JNLP (même intégré, en utilisant l'architecture Plug-In2) n'ont pas accès au JavaScript. :(Notez que c'est juste la façon dont je comprends, je ne suis pas sûr à 100% –

+0

@Andrew: Les travaux ci-dessus, donc je pense que votre compréhension peut être incomplète – Carl

+0

Merci pour la correction! Je donnais aux gens des informations erronées. Malheureusement, je ne suis pas en mesure de voir quel est le problème ici, mais si j'ai des inspirations, je vais retomber. –