无法在 NetBeans 中导入 sun.org.mozilla.javascript.internal
-
02-10-2019 - |
题
在我的 java 程序中,我大量使用 Suns 的 Rhino 脚本引擎实现。然而最近,我的 JDK 在编译时似乎不再自动导入 rt.jar 文件。
奇怪的是,NetBeans 报告 0 个实时错误,它们仅在执行完整的 Clean & Build 时才会出现。之前我导入 NativeArray 时没有发生过这种情况,所以我真的很困惑为什么它突然停止工作。
眼镜:
- 操作系统-Windows
- Java 版本 - java 版本“1.6.0_20”
- 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
那么什么会导致这个突然失败呢?昨天还运行得很好。除了从同一个包中导入另外 2 个类之外,我没有做任何更改。我的依赖关系都没有改变。
将在linux下进行测试,看看问题是否仍然存在。
在你说之前:不,我不会单独下载 rhino,不,我不会更改 IDE,
解决方案
有两个迹象表明您不应该使用此类: sun
和 internal
- 这意味着这是一些第三方不应使用的内部类。因为它可以在未来的版本中更改或删除 - 即这不是 API 的一部分。所以 - 单独下载 Rhino。
如果您使用脚本 API - 仅使用 API 类/接口 - 即 javax.script
其他提示
我同意以上建议,最好不要尝试使用Sun Internal套餐。
这就提出了一个问题,您如何访问w/out out sun.org.mozilla.javascript.internal.nativearray的JavaScript阵列?
对我有用的是代码如下。这将在一个名为vars的JavaScript数组中创建一个称为VARS的Java数组。
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+"];");
}
我有同样的错误。您必须手动添加 rt.jar
从JRE DIR到项目库。只有该解决方案似乎起作用。您还可以看到有关此方法的教程 这里 作者Rob Di Marco
现在,这是一个古老的问题,但是当我遇到这个问题时,我的解决方案是在JavaScript环境中进行更多工作,然后返回原始类型(字符串 /布尔)而不是对象。
当然,这将无法满足所有人和所有要求,但在某些情况下可能会有所帮助。