代码之家  ›  专栏  ›  技术社区  ›  TheLQ

无法在NetBeans中导入sun.org.mozilla.javascript.internal

  •  4
  • TheLQ  · 技术社区  · 14 年前

    在我的Java程序中,我大量使用了Runo脚本引擎的Sun插件。然而,最近,我的JDK在编译时似乎不再自动导入rt.jar文件。

    奇怪的是,NetBeans报告了0个实时错误,它们只在进行完整的清理和构建时出现。这在我导入NativeArray之前没有发生过,所以我很困惑为什么它突然停止工作。

    规格:

    • 操作系统窗口
    • Java版本-Java版本“1.60Y20”
    • javac版本-javac 1.6.0_20
    • NetBeans版本-6.9

    检查是否存在:

    C:\Documents and Settings\LordQuackstar\Desktop\TestApp\src>javap sun.org.mozill
    a.javascript.internal.WrappedException
    Compiled from "WrappedException.java"
    public class sun.org.mozilla.javascript.internal.WrappedException extends sun.or
    g.mozilla.javascript.internal.EvaluatorException{
        static final long serialVersionUID;
        public sun.org.mozilla.javascript.internal.WrappedException(java.lang.Throwa
    ble);
        public java.lang.Throwable getWrappedException();
        public java.lang.Object unwrap();
    }

    好的,它存在,所以这里有一些测试代码:

    package testapp;
    
    import sun.org.mozilla.javascript.internal.WrappedException;
    
    public class Main {
        public static void main(String[] args) {
            WrappedException e = new WrappedException(null);
        }
    }
    

    Netbeans输出:

    init:
    deps-clean:
    Updating property file: C:\Documents and Settings\LordQuackstar\Desktop\TestApp\build\built-clean.properties
    Deleting directory C:\Documents and Settings\LordQuackstar\Desktop\TestApp\build
    clean:
    init:
    deps-jar:
    Created dir: C:\Documents and Settings\LordQuackstar\Desktop\TestApp\build
    Updating property file: C:\Documents and Settings\LordQuackstar\Desktop\TestApp\build\built-jar.properties
    Created dir: C:\Documents and Settings\LordQuackstar\Desktop\TestApp\build\classes
    Created dir: C:\Documents and Settings\LordQuackstar\Desktop\TestApp\build\empty
    Compiling 1 source file to C:\Documents and Settings\LordQuackstar\Desktop\TestApp\build\classes
    C:\Documents and Settings\LordQuackstar\Desktop\TestApp\src\testapp\Main.java:8: package sun.org.mozilla.javascript.internal does not exist
    import sun.org.mozilla.javascript.internal.WrappedException;
    C:\Documents and Settings\LordQuackstar\Desktop\TestApp\src\testapp\Main.java:16: cannot find symbol
    symbol  : class WrappedException
    location: class testapp.Main
                    WrappedException e = new WrappedException(null);
                    ^
    C:\Documents and Settings\LordQuackstar\Desktop\TestApp\src\testapp\Main.java:16: cannot find symbol
    symbol  : class WrappedException
    location: class testapp.Main
                    WrappedException e = new WrappedException(null);
                                             ^
    3 errors
    C:\Documents and Settings\LordQuackstar\Desktop\TestApp\nbproject\build-impl.xml:528: The following error occurred while executing this line:
    C:\Documents and Settings\LordQuackstar\Desktop\TestApp\nbproject\build-impl.xml:261: Compile failed; see the compiler error output for details.
    BUILD FAILED (total time: 0 seconds)

    命令行输出:

    C:\Documents and Settings\LordQuackstar\Desktop\TestApp\src\testapp>javac Main.java
    Main.java:3: package sun.org.mozilla.javascript.internal does not exist
    import sun.org.mozilla.javascript.internal.WrappedException;
                                              ^
    Main.java:7: cannot find symbol
    symbol  : class WrappedException
    location: class testapp.Main
            WrappedException e = new WrappedException(null);
            ^
    Main.java:7: cannot find symbol
    symbol  : class WrappedException
    location: class testapp.Main
            WrappedException e = new WrappedException(null);
                                     ^
    3 errors

    那么什么会导致这一切突然失败呢?昨天工作得很好。除了从同一个包中导入另外两个类之外,我什么都没有更改。我的依赖没有改变。

    将在Linux中进行测试以查看问题是否仍然存在。

    在你说之前:不,我不会单独下载犀牛,不,我不会更改IDES,

    4 回复  |  直到 11 年前
        1
  •  6
  •   Bozho    14 年前

    有两种迹象表明您不应使用此类: sun internal -这意味着这是一些不应该被第三方使用的内部类。因为它可以在将来的版本中更改或删除——也就是说,这不是API的一部分。所以-单独下载Rhino。

    如果您使用的是脚本API-仅使用API类/接口-即 javax.script

        2
  •  4
  •   James A    12 年前

    我同意上述建议,你最好不要尝试使用Sun内部软件包。

    这就引出了一个问题:如何使用sun.org.mozilla.javascript.internal.nativearray访问javascript数组?

    对我有用的代码如下。这将创建一个称为VARS的Java阵列,它由一个名为VARS的JavaScript数组组成。

    int varsLength = ((Double)engine.eval("vars.length;")).intValue();
    Object[] vars = new Object[varsLength];
    for(int i=0; i<vars.length; i++){
        vars[i] = engine.eval("vars["+i+"];");
    }
    
        3
  •  1
  •   Ben Reich    11 年前

    我也有同样的错误。必须手动添加 rt.jar 从JRE目录到项目库。只有这个解决方案才有效。您还可以看到有关此方法的教程 here Rob Di Marco

        4
  •  0
  •   daveb    13 年前

    这是一个古老的问题,但是当我遇到这个问题时,我的解决方案是在JavaScript环境中做更多的工作,然后返回一个基元类型(字符串/布尔值)而不是一个对象。

    当然,这并不能满足所有人和所有需求,但在某些情况下可能会有所帮助。