2012-12-19 9 views
9

sto provando a chiamare JSObject.getWindow(this) nel metodo di JAppletinit ma non è in grado di risolvere il simbolo getWindow.Non in grado di risolvere JSObject in un progetto Java applet

questo problema si verifica in particolare con un progetto di applicazione javafx creato tramite netbeans, getWindow viene risolto se utilizzato in un progetto di applicazione Java.

Ho anche incluso il plugin.jar dal percorso Java\jdk1.7.0_07\jre\lib.

Questo è un progetto di applicazione javafx che ho creato in netbeans.

+1

* "non è in grado di risolvere il simbolo getWindow." * Significa lo stesso di "restituisce' null' "o è qualcos'altro? Hai un link a dove possiamo visitare l'app. (e vedi fallire)? Potrebbe essere utile aggiungere anche un [SSCCE] (http://sscce.org/) di codice che attiva l'errore - non dovrebbe richiedere più di 2 dozzine di righe. –

+0

può essere correlato: ho iniziato a costruire con Java 8 e, almeno dal momento della compilazione 72, ho riscontrato un errore di compilazione per le applet che utilizzano questo metodo ('com.netscape.JSObject.getWindow'). – haylem

+2

Ho archiviato [RT-30622 Impossibile risolvere JSObject.getWindow (this) in un progetto di applet java] (https://javafx-jira.kenai.com/browse/RT-30622) rispetto al progetto JavaFX per tenere traccia di questo problema . – jewelsea

risposta

13

La ragione di ciò è che jfxrt.lib ha anche una classe denominata JSObject. Questo JSObject non ha la funzione getWindow definita mentre plugin.jar ne ha uno. Se si modifica l'ordine di dipendenza di JAR e si fa java per risolvere JSObject su plugin.jar, allora java è in grado di chiamare la funzione getWindow.

Di seguito sono riportati i collegamenti ai javadoc di entrambe le classi. Si noti che jfxrt non ha definito getWindow.

http://docs.oracle.com/javafx/2/api/netscape/javascript/JSObject.html

http://www.oracle.com/webfolder/technetwork/java/plugin2/liveconnect/jsobject-javadoc/netscape/javascript/JSObject.html

1

Hai import netscape.javascript.*;?

+0

sì, ho incluso. –

+0

Non ho familiarità con NetBeans, dovresti controllare se hai aggiunto plugin.jar al tuo classpath. – tchike

+0

Si sta eseguendo l'applet direttamente da NetBeans o si sta eseguendo da un browser? Forse c'è una differenza lì. –

1

cercando di chiamare JSObject.getWindow(this) nel init metodo

Il JSObject non è in genere disponibile fino start() si chiama.

+0

Anche in avvio non è in grado di risolvere, dando un errore di compilazione che dice che il simbolo getWindow non è stato trovato. È comunque in grado di riconoscere JSObject. Questo sta accadendo solo quando sto creando un progetto di applicazione javafx in Netbeans, sta funzionando bene con un progetto di applicazione Java. –

4

Sto usando IntelliJ e ho appena riscontrato un problema simile.

Quello che penso stia accadendo è che jfxrt.jar e plugin.jar hanno entrambe le classi netscape.javascript.JSObject, ma le due classi hanno diverse firme. IntelliJ stava aggiungendo i jar da jre/lib in ordine alfabetico al classpath.

Dicendo a IntelliJ di non aggiungere jfxrt.jar al classpath, sono riuscito a risolvere il problema perché non sto utilizzando JavaFX.

cosa questo indica è che JavaFX richiede un approccio diverso all'uso JSObject - Non sono un esperto (non anche un principiante) presso JavaFX ma la pagina che segue sembra utile e mi suggerisce che chiama Javascript è fatto in modo diverso in JavaFX utilizzando WebEngine.executeScript(): https://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx

1

@deorvatsingh Qui è il problema non con i NetBeans l'ordine si è aggiunto il vaso di. in JavaFX applicazione jfxar.jar è visibile prima nei casi in NetBeans Questo è il motivo per cui non sono in grado di ottenere l'ambito per il vostro JSObject.getWindow(this),

per l'esecuzione di questo con NetBeans e fxappication si aggiunge il primo jfxrt il plugin.jar quindi aggiungere. barattolo alla tua appicazione allora riconoscerà.

Problemi correlati