我遇到了像Not able to resolve JSObject in a java applet project这样的问题:
这里的问题是我使用java 8和maven进行构建,因此我无法从构建路径中删除jfxrt.jar,而且似乎无法更改JDK和maven依赖项的顺序。
那么有没有办法以某种方式排除JavaFX,或者是否有替代JSObject.getWindow来从托管网站调用一些JavaScript?
答案 0 :(得分:1)
最后找到了一个解决方案(主要取自http://apache-geronimo.328035.n3.nabble.com/Maven-compiler-endorsed-libraries-tp693448p702566.html):
编译器插件:
<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>
答案 1 :(得分:0)
另一个对我有用的选择是包含 plugin.jar
并通过反思调用getWindow
。
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();
}