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

JSObject。getWindow(本);始终引发异常

茅星雨
2023-03-14

我正在Java /JavaScript编码,我似乎碰壁了。我试图将agruments从Java传递到JavaScript,但无论我做什么“JSObject jso=JSObject.getWindow(this);”总是抛出一个异常。我做了一些搜索,找不到任何解决方案。我从一个网站(http://www.codejava.net/java-se/applet/liveconnect-the-api-for-communication-between-java-applet-and-javascript)窃取了下面的代码,在JavaScript或Java中都没有看到任何错误,两个文件都可以正确编译。

添加了插件。jar通过buildpath访问,并确保jfxrt。jar不在生成路径中。我认为这个插件可能有问题。jre7中的jar,所以我尝试了jre6,但得到了相同的错误。我使用的代码如下。

Java代码:

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>

引发异常:

netscape.javascript.JSException
    at netscape.javascript.JSObject.getWindow(Unknown Source)
    at test.TestApplet.testLiveConnect(TestApplet.java:34)
    at test.TestApplet.access$0(TestApplet.java:33)
    at test.TestApplet$1$1.run(TestApplet.java:22)
    at java.lang.Thread.run(Unknown Source)

共有2个答案

仇睿
2023-03-14

我遇到了同样的问题,只需更改以下行即可解决:

JSObject jso = JSObject.getWindow(this);

收件人:

JSObject jso = JSObject.getWindow((Applet)this);
劳昊明
2023-03-14

这曾经让我抓狂。Java7显然带有两个jar,其中包含同一个类的不同实现。jfxrt.jar和plugin.jar

我通过简单地删除jfxrt解决了这些问题。jar来自我的类路径。你必须研究如何为你的构建系统做到这一点。在Intellij中,您可以访问:

文件-

然后,在类路径选项卡上,高亮显示jfxrt。jar并单击“-”

埃塔:我找到了最初帮助我的答案,它有更多的信息:https://stackoverflow.com/a/14156602/1057157

 类似资料:
  • 你可以使用raise语句 引发 异常。你还得指明错误/异常的名称和伴随异常 触发的 异常对象。你可以引发的错误或异常应该分别是一个Error或Exception类的直接或间接导出类。 如何引发异常 例13.2 如何引发异常 #!/usr/bin/python # Filename: raising.py classShortInputException(Exception):     '''A u

  • 所以我使用了DataInputStream、FileInputStream、BufferInputStream、FileReader、BufferedReader、Scanner。它们都抛出FileNOtFoundException或CorruptedStreamException。

  • 问题内容: 我正面临一个用例,其中我想用一个初始化器语句声明一个字段,该语句被声明为引发一个检查异常。通常,它看起来像这样: 我在这里遇到的问题是,构造函数可能会抛出各种我不关心的检查异常(因为我知道我的名字是有效的,并且如果它不幸崩溃则可以)。Java编译器不会让我忽略这个(因为它是一个检查的异常),所以我不愿诉诸: 因为静态块确实非常难以阅读。有人对如何以一种干净的方式处理此案有建议吗? 问题

  • 问题内容: 鉴于此Java 8代码 我们如何正确地将其委派给方法调用的堆栈?(简而言之,如何使此方法抛出此错误?) Java中的Lambda看起来对错误处理不是很友好… 问题答案: 我的方法是从lambda 偷偷地 将其抛出,但是要小心,使该方法在其子句中声明它。使用我在这里发布的课程: 这样,您可以有效地使编译器仅“移开视线”,从而在代码中的某个位置禁用其异常检查,但是通过在方法中声明异常,可以

  • 我使用正则表达式来查找一个字符串是否存在于一个书页中。下面是相同的代码。 观察: > 案例1:当searchText=“(222M)”时 结果:找到字符串。 案例2:当search chText="(222M"//缺少括号时 我得到以下例外。 索引22:.\b.{0}(1110r.{附近regexp模式中嵌套的括号不正确。{0}.\b 还有更好的在页面中查找字符串的选项。使用String.cont