Java JSObject.getWindow(这个);总是抛出异常
我在一些Java/JavaScript编码上下了很大的功夫,我似乎遇到了麻烦。我试图将图形从Java传递到JavaScript,但无论我做什么,“JSObject jso=JSObject.getWindow(this);”总是抛出一个异常。我做了一些搜索,找不到任何解决方案。我从一个网站()偷了下面的代码,在JavaScript或Java中都没有看到任何错误,并且两个文件都编译正确 我已经将plugin.jar添加到by buildpath,并确保jfxrt.jar不在构建路径中。我认为jre7中的plugin.jar可能有问题,所以我尝试了jre6,但得到了相同的错误。我使用的代码如下 Java代码:Java JSObject.getWindow(这个);总是抛出异常,java,javascript,jsobject,Java,Javascript,Jsobject,我在一些Java/JavaScript编码上下了很大的功夫,我似乎遇到了麻烦。我试图将图形从Java传递到JavaScript,但无论我做什么,“JSObject jso=JSObject.getWindow(this);”总是抛出一个异常。我做了一些搜索,找不到任何解决方案。我从一个网站()偷了下面的代码,在JavaScript或Java中都没有看到任何错误,并且两个文件都编译正确 我已经将plugin.jar添加到by buildpath,并确保jfxrt.jar不在构建路径中。我认为jre
package test;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import netscape.javascript.*;
public class TestApplet extends JApplet {
private JButton button = new JButton("Call Javascript");
private JLabel label = new JLabel();
public void init() {
getContentPane().setLayout(new BorderLayout());
getContentPane().add(button, BorderLayout.NORTH);
getContentPane().add(label, BorderLayout.SOUTH);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
Thread runner = new Thread(new Runnable() {
public void run() {
try {
testLiveConnect();
} catch (JSException jse) {
// Error
jse.printStackTrace();
}
}
});
runner.start();
}
});
}
private void testLiveConnect() throws JSException {
JSObject jso = JSObject.getWindow(this);
// call Javascript's method foo() with no argument
String result = (String) jso.call("foo", null);
label.setText(result);
// delay 2 seconds to see the result
try { Thread.sleep(2000); } catch (InterruptedException ie) {};
// call Javascript's method foo() with two arguments
result = (String) jso.call("bar", new String[] {"Alice", "Alisa"});
label.setText(result);
try { Thread.sleep(2000); } catch (InterruptedException ie) {};
// execute a Javascript expression
String expression = "alert('Hi, I am from Javascript.');";
jso.eval(expression);
try { Thread.sleep(2000); } catch (InterruptedException ie) {};
// get value of a named member from Javascript
result = (String) jso.getMember("coop");
label.setText(result);
try { Thread.sleep(2000); } catch (InterruptedException ie) {};
// get value of an indexed member from Javascript
result = (String) jso.getSlot(1);
label.setText(result);
}
}
JavaScript代码:
<html>
<head>
<title>LiveConnect - Java-Javascript communnication demo</title>
</head>
<body>
<center>
<applet id="testApplet"
code="TestApplet.class"
width="200" height="80"
>
</applet>
</center>
</body>
<script type="text/javascript">
var coop = "Ooops!";
this[1] = "Slot 1";
function foo() {
return "This is from foo()";
}
function bar(firstName, lastName) {
return "Greeting " + firstName + " " + lastName + "!";
}
</script>
</html>
这曾经让我发疯。Java7显然附带了两个JAR,其中包含同一类的不同实现。jfxrt.jar和plugin.jar 通过从类路径中删除jfxrt.jar,我解决了这些问题。你必须挖掘如何为你的构建系统做到这一点。在Intellij中,您可以访问: 文件->项目结构->SDK 然后,在classpath选项卡上,突出显示jfxrt.jar并单击“-”
ETA:我找到了最初帮助我的答案,其中包含了更多信息:我遇到了同样的问题,只需更改以下行即可解决:
JSObject jso = JSObject.getWindow(this);
致:
谢谢你的回复。我之前确保jfxrt.jar不在我的构建路径中。我之前在编译java文件时遇到了这个问题。我遇到的异常发生在runtime.Hrmm。我的错。FWIW您的源代码在Chrome和IE 10的Win7 x64中对我来说都很好。它在下面的链接中工作吗?如果是这样,可能是本地小程序安全问题。。。是的,它在您提供的链接上工作。我正试图在eclipse中运行它。Eclipse构建了javaapplet,但当我单击按钮时,会出现异常。它一定是我缺少的某个配置设置。感谢您的帮助。当您说“在eclipse中运行它”时,它是启动本机浏览器来运行它,还是在IDE中启动一个窗格?如果是前者,则它可能以某种方式作为其代理(例如,作为脚本调试器)。如果是后者,那么它可能不是JSObject能够连接到的功能齐全的浏览器。好的编辑已经被回滚了好几次,请不要再这样做了-这被认为是故意破坏。
JSObject jso = JSObject.getWindow(this);
JSObject jso = JSObject.getWindow((Applet)this);