我尝试在[{1}} JSObject.getWindow(this)
方法中调用init
,但无法解析符号JApplet
。
这个问题特别发生在通过netbeans创建的javafx应用程序项目中,如果在java应用程序项目中使用,getWindow将得到解决。
我还在路径getWindow
中添加了plugin.jar
。
这是我在netbeans中创建的javafx应用程序项目。
答案 0 :(得分:13)
原因是jfxrt.lib还有一个名为JSObject的类。这个JSObject没有plugin.jar定义的getWindow函数。如果更改JAR的依赖顺序并使java将JSObject解析为plugin.jar,则java可以调用getWindow函数。
以下是两个类的javadocs的链接。注意jfxrt没有定义getWindow。
http://docs.oracle.com/javafx/2/api/netscape/javascript/JSObject.html
答案 1 :(得分:4)
我正在使用IntelliJ,并且遇到了类似的问题。
我认为正在发生的是jfxrt.jar和plugin.jar都有netscape.javascript.JSObject
个类,但这两个类有不同的签名。 IntelliJ将jre / lib中的jar按字母顺序添加到类路径中。
告诉IntelliJ不要将jfxrt.jar添加到类路径中,我已经能够解决我的问题,因为我没有使用JavaFX。
这指出JavaFX需要一种不同的方法来使用JSObject - 我不是JavaFX的专家(甚至不是初学者),但是下面的页面看起来很有用,并告诉我在JavaFX中调用Javascript的方式不同WebEngine.executeScript()
:https://blogs.oracle.com/javafx/entry/communicating_between_javascript_and_javafx
答案 2 :(得分:1)
你有import netscape.javascript.*;
吗?
答案 3 :(得分:1)
尝试在
JSObject.getWindow(this)
方法中调用init
在JSObject
被调用之前,start()
通常无法使用。
答案 4 :(得分:1)
@deorvatsingh这是问题,而不是netbeans你添加jar的顺序。在JavaFx应用程序中,jfxar.jar在netbeans案例中首先可见,这是因为您无法获得JSObject.getWindow(this)
的范围,
要使用netbeans和fxappication执行此操作,首先添加plugin.jar,然后将jfxrt.jar添加到您的应用程序中,然后它将识别。