Не удается импортировать sun.org.mozilla.javascript.internal в NetBeans - PullRequest
4 голосов
/ 05 июля 2010

В моей Java-программе я интенсивно использую реализацию Suns движка скриптов Rhino. Однако совсем недавно мой JDK, похоже, больше не импортирует файл rt.jar при компиляции.

Что странно, так это то, что NetBeans сообщает о 0 живых ошибках, они появляются только при полной очистке и сборке. Этого не было раньше, когда я импортировал 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,

Ответы [ 4 ]

6 голосов
/ 05 июля 2010

Существует два признака того, что вы не должны использовать этот класс: sun и internal - это означает, что это некоторый внутренний класс, который не должен использоваться третьими лицами.Потому что это может измениться или быть удалено в будущих выпусках - то есть это не часть API.Итак - загрузите Rhino отдельно.

Если вы используете API сценариев - используйте только классы / интерфейсы API - т.е. javax.script

4 голосов
/ 10 апреля 2013

Я согласен с приведенным выше советом, что вам лучше не пытаться использовать внутренние пакеты Sun.

Возникает вопрос: как получить доступ к массивам JavaScript без sun.org.mozilla.javascript.internal.NativeArray?

Что сработало для меня, так это код следующим образом.Это создает массив Java с именем vars на основе массива JavaScript с именем vars.

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+"];");
}
1 голос
/ 27 мая 2012

У меня была такая же ошибка. Вы должны вручную добавить rt.jar из JRE dir в библиотеки проекта. Только это решение кажется работой. Вы также можете увидеть учебное пособие по этому подходу здесь Роба Ди Марко

0 голосов
/ 16 марта 2012

Теперь это старый вопрос, однако, когда у меня возникла эта проблема, я решил сделать больше работы в среде JavaScript и затем вернуть примитивный тип (String / Boolean) вместо объекта.

Конечно, это не удовлетворит всех и всех требований, но в некоторых случаях может помочь.

...