【问题标题】:Not able to resolve JSObject in a java applet project [duplicate]无法解析 Java 小程序项目中的 JSObject [重复]
【发布时间】:2012-12-19 13:55:03
【问题描述】:

我试图在JAppletinit 方法中调用JSObject.getWindow(this),但它无法解析符号getWindow

这个问题特别发生在通过 netbeans 创建的 javafx 应用程序项目中,如果在 java 应用程序项目中使用 getWindow 将得到解决。

我还包含来自路径Java\jdk1.7.0_07\jre\libplugin.jar

这是我在 netbeans 中创建的 javafx 应用项目。

【问题讨论】:

  • "它无法解析符号 getWindow。" 这是否与'returns null' 相同,还是其他?您是否有指向我们可以访问该应用程序的链接。 (并看到它失败了)?添加触发错误的代码SSCCE 可能会有所帮助 - 它不应超过 2 打行。
  • 可能与此相关:我一直在使用 Java 8 早期构建进行构建,至少从构建 72 开始,使用此方法 (com.netscape.JSObject.getWindow) 的小程序也出现编译失败。
  • 我向 JavaFX 项目提交了RT-30622 Not able to resolve JSObject.getWindow(this) in a java applet project 以跟踪此问题。

标签: java javascript applet javafx-2 jsobject


【解决方案1】:

原因是 jfxrt.lib 还有一个名为 JSObject 的类。这个 JSObject 没有定义 getWindow 函数,而 plugin.jar 有。如果你改变JAR的依赖顺序,让java把JSObject解析成plugin.jar,那么java就可以调用getWindow函数了。

以下是两个类的 javadocs 的链接。请注意,jfxrt 一个没有定义 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

【讨论】:

    【解决方案2】:

    我正在使用 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

    【讨论】:

      【解决方案3】:

      试图在init 方法中调用JSObject.getWindow(this)

      JSObject 通常在调用 start() 之前不可用。

      【讨论】:

      • 即使在启动时也无法解决,给出一个编译错误,告诉您找不到 getWindow 符号。但它能够识别 JSObject。这只发生在我在 Netbeans 中创建 javafx 应用程序项目时,它与 java 应用程序项目一起工作正常。
      【解决方案4】:

      import netscape.javascript.*;了吗?

      【讨论】:

      • 我对 NetBeans 不熟悉,您应该检查是否将 plugin.jar 添加到类路径中。
      • 您是直接从 NetBeans 运行小程序还是从浏览器运行?也许那里有区别。
      【解决方案5】:

      @deorvatsingh 这不是 netbeans 的问题,您添加 jar 的顺序。在 JavaFx 应用程序中,jfxar.jar 首先在 netbeans 案例中可见,这就是您无法获得 JSObject.getWindow(this) 范围的原因,

      要使用 netbeans 和 fxappication 执行此操作,您首先添加 plugin.jar,然后将 jfxrt.jar 添加到您的应用程序中,然后它会识别。

      【讨论】:

        猜你喜欢
        • 2019-07-14
        • 2016-09-05
        • 2013-09-13
        • 2012-07-30
        • 2019-07-14
        • 1970-01-01
        • 1970-01-01
        • 2013-05-13
        • 1970-01-01
        相关资源
        最近更新 更多