当前位置: 首页 > 知识库问答 >
问题:

Maven/Java8构建中的编译错误:找不到符号JSObject。获取窗口

张砚
2023-03-14

我遇到了同样的问题,比如在java applet项目中无法解析JSObject:

  • JSObject取自jfxrt。jar(JavaFX)在jdk中,而不是从插件中。jar,因此没有JSObject。getWindow方法和编译失败

这里的问题是,我用java 8和maven构建,所以我不能从构建路径中删除jfxrt.jar,而且JDK和maven依赖项的顺序似乎不能改变。

那么,有没有办法以某种方式排除JavaFX,或者有没有JSObject的替代品呢。getWindow从托管网站调用一些JavaScript?

共有2个答案

阴永福
2023-03-14

<罢工>

public JSObject getJSObject() {
    try {
        Method m = JSObject.class.getMethod("getWindow", Applet.class);
        return (JSObject)m.invoke(null, Applet.this);
    }
    catch (Exception e) {
        // do something
        return null;
    }
}

<罢工> 不需要更改依赖项的顺序。

编辑:它在Eclipse中运行时正常工作,但在浏览器中运行时出现了一个NoSuchMethodException。

但是我找到了另一个选择:

包含plugin.jar,不要改变顺序。然后,将此方法包含在类中。

public static JSObject getWindow(Applet applet) {
    if (applet != null) {
        AppletContext context = applet.getAppletContext();

        if (context instanceof JSContext) {
            JSContext jsContext = (JSContext)context;
            JSObject jsObject = jsContext.getJSObject();

            if (jsObject != null) {
                return jsObject;
            }
        }
    }

    throw new JSException();
}
华项明
2023-03-14

最终找到了解决方案(主要来自http://apache-geronimo.328035.n3.nabble.com/Maven-compiler-endorsed-libraries-tp693448p702566.html):

  • java编译器有一个选项“endorseddirs”来覆盖引导类

编译器插件:

<plugin>
 <artifactId>maven-compiler-plugin</artifactId>
 <configuration>
  <compilerArguments>
   <endorseddirs>${project.build.directory}/endorsed</endorseddirs>
  </compilerArguments>
 </configuration>
</plugin>

(如果您有plugin.jar作为maven依赖项:)

<plugin>
  <artifactId>maven-dependency-plugin</artifactId>
  <executions>
   <execution>
    <id>copy-endorsed-dependencies</id>
    <phase>generate-sources</phase>
    <goals>
     <goal>copy-dependencies</goal>
    </goals>
    <configuration>
     <includeArtifactIds>plugin</includeArtifactIds>
     <outputDirectory>${project.build.directory}/endorsed</outputDirectory>
    </configuration>
   </execution>
    ...
 </plugin>
 类似资料:
  • 问题内容: 当代码到达递归调用增量时,我收到错误找不到符号,我不知道为什么?这是增量代码。任何帮助将不胜感激。 编辑:我真的是Java的新手,所以可以做的答案越基本越好。好的,所以我收到的错误是:BigNatural.java.35:找不到符号符号方法增量()位置:类java.lang.String temp.increment() 并在此处清除所有其他问题,是整个代码。 }公共类BigNatur

  • 我有这样的代码:获取一个文本文件,并将其转换为字符串,然后将字符串的部分分离为ArrayList的不同元素。 然而,当我试图编译它时,它给了我两个错误: javac Message.java Message.java:31:找不到符号symbol:变量输入位置:类消息while(input.HasNextLine()){^Message.java:32:找不到符号symbol:变量输入位置:类消息

  • 问题内容: 嘿,我刚开始我的第一本Java编程书籍,所以这应该很容易解决。弄乱我对条件句的新知识,发现标题错误。 这是代码: 当我尝试编译时: 问题答案: 错误消息告诉您变量“输入”在您的作用域中不存在。您可能想使用Scanner对象,但将其命名为“ x”,而不是“ input”。 应该修复它。

  • 这是一个非常简单的网页抓取程序,我用intellij的想法和maven构建系统构建的。它在今天之前工作得很好,但是当我今天试图构建它的时候,它给了我对象没有找到基本java对象的错误,比如字符串和列表。当我试图重新加载maven项目时,我得到了下面的另一个错误。idea也用红色突出了基本的java对象,没有给出任何建议。我做的唯一一件事是稍微修改了java源代码。所以,我用股票你好世界代码进行了测

  • 我一直在尝试使用Eclipse和Forge编译Minecraft mod,但我只是遇到错误,我想这是与链接Minecraft库有关,但不确定这是我的代码 我正在遵循一个指南,应该在最后得到一条“构建成功”的消息。指南是https://blog.usejournal.com/a-beginners-guide-to-modding-Minecraft-9A42536495F6 这里有个错误

  • 由于某种原因,此命令在我的本地计算机上运行良好: 但是,对于Codeship,它现在起作用了,并抛出这个“无法找到符号”错误。在Codeship中,完整命令为: 在POM中,存储库具有以下内容: 错误: